Skrill

Learn how to accept Skrill payments.

Skrill is a premier global digital wallet operating across 200+ countries and supporting 40+ currencies, with core processing and settlement in EUR, GBP, and USD. It is highly optimized for e-commerce, digital goods, travel, and gaming.

Payment typeWallet
MarketGlobal
Customer currenciesVarious
Processing currenciesVarious
RefundsYes (full refunds only)
PayoutYes

Step 1. Make a transaction request

From your server, make a POST

https://service-sandbox.apmgw-dev.payabl.tech/apm_gw/payment_preauthorize
https://api.apmgw-prod.payabl.tech/v1/payment_preauthorize

Request Type: POST
Content-Type: application/x-www-form-urlencoded

Include in request:

ParameterDescriptionError CodeError Message
merchantid*min. 3 charactersMerchant identification number assigned during account creation-6001No valid fields found
amount*digits or two decimal places (e.g. 8 or 8.50)Transaction’s total amount that will be deducted from the customer-6102Wrong amount
currency*3 charactersThe currency field contains the alpha-3 currency code for the transaction-6103Wrong currency
orderid*max. 40 charactersThe field orderid must be unique for PayPal-6132Wrong order-ID
payment_method*216payabl. payment methods IDs-6157Wrong paymentmethod
signature*40 charactersSecurity signature for response validation  
email*max. 50 charactersCustomer’s email-6119Wrong email
firstnamemax. 100 charactersCustomer’s first name-6113Wrong firstname
lastnamemax. 100 charactersCustomer’s last name-6105Wrong lastname
country3 charactersCustomer’s country (alpha-3 format)-6174Wrong country code
streetmax. 100 charactersCustomer’s street address-6106Wrong street
citymax. 100 charactersCustomer’s city-6108Wrong city
statemax. 30 charactersCustomer’s state-6118Wrong state
zipmin. 3, max. 10 charactersCustomer’s ZIP code-6107Wrong zip
birthdayDDMMYYYYThe customer’s birthday-6115Wrong birthday
languagestring (default “en”)language-6133Wrong customer-language
phonestringphone of the customer-6120Wrong phone
url_successmax. 500 characters starting with http or httpsSuccessful transaction redirection URL-6128Wrong url-Success
url_failedmax. 500 characters starting with http or httpsFailed transaction redirection URL-6129Wrong url-Failed
url_returnmax. 500 characters starting with http or httpsURL for customer redirection-6134Wrong return URL
notification_urlmax. 500 characters starting with http or httpsNotification url-6173Wrong notification URL

* - required fields

Request example:

curl --location 'https://service-sandbox.apmgw-dev.payabl.tech/apm_gw/payment_preauthorize' \
  -d merchantid='gateway_test' \
  -d amount='30.00' \
  -d currency='EUR' \
  -d payment_method='216' \
  -d email='[email protected]' \
  -d notification_url='https://project-lkkw1.vercel.app/api/accept/b1429c9d-9dc4-4edd-b122-df31d4af8782' \
  -d url_return='https://project-lkkw1.vercel.app/api/accept/b1429c9d-9dc4-4edd-b122-df31d4af8782' \
  -d firstname='Jan' \
  -d lastname='Kowalski' \
  -d orderid='ORDER-7001' \
  -d signature='416acddd9b0a2dc9a1f76acb0adc8904d0020c5d'
🚧

Public Sandbox information

Do not use your personal email address, Order ID with sensitive information, real customer details and credit card data in the public Sandbox. For email field you may use [email protected].

To complete the payment, you need to redirect the customer to the correct URL in the response.

Raw response example - successful transaction:

transactionid=4882178211459825687&transid=4882178211459825687&status=2000&errormessage=pending&errmsg=pending&amount=10.32&price=10.32&currency=EUR&orderid=Payabl-Test&payment_method=216&redirect_url=https%3A%2F%2Fpay.skrill.com%2F%3Fsid%3D9bc57194c3ede8e0c1c97a34e9b0a41e

Raw response example - failed transaction:

transactionid=undef&transid=undef&status=-6119&errormessage=Wrong email&errmsg=Wrong email&amount=&price=&currency=&orderid=&payment_method=
📘

If status=2000, the payment has been successfully initialized. To complete the payment, redirect the customer to redirect_url.

Included in response:

ParameterTypeDescription
transactionidstringpayabl. transaction id
transidstringpayabl. transaction id
amountstringTransaction amount
pricestringTransaction amount
currencystringTransaction currency
statusstringError code or Request status code (e.g., 2000)
errormessagestringError message or status message (e.g., pending)
errmsgstringError message
payment_methodstringPayment method identifier
orderidstringMerchant's order identifier
redirect_urlstringURL to redirect the customer for payment completion

Step 2. Handle the redirect

📘

Redirection to url_return does not confirm that the transaction is successful. Always check the transaction via notification_url or use the diagnose interface to get the final status of the transaction.

After the customer completes the payment on the provider side, they will be redirected to your url_success or url_failed.

Redirect Response Example - successful transaction:

transactionid=4882178213561073688&timestamp=1771503154&orderid=Payabl-Test&payment_method=216&errormessage=&errorcode=0&type=capture&amount=10.32&currency=EUR&payment_state=credited&security=cf2dd2ffe8d22b9f84eb341a01d9d54672e56be04bed30a92d0a7850dc754c67

Redirect Response Example - failed transaction:

transactionid=4882242633810676830&timestamp=1787230781&orderid=Payabl-Test&payment_method=216&errormessage=Cancelled by user&errorcode=110&type=order&amount=1.32&currency=EUR&payment_state=not_credited&security=1cc8efe888211e9fe9bb73ca76be47b29938626766e59083cd43d84988158ff5

Included in response:

ParameterTypeDescription
transaction_idstringUnique transaction identifier
amountstringTransaction amount
currencystringISO 4217 currency code
timestampstringTransaction timestamp
orderidstringMerchant's order identifier
payment_methodstringPayment method identifier
errormessagestringHuman-readable error message
errorcodestringError code
typestringTransaction type (e.g., order, capture)
securitystringSecurity signature for response validation
payment_statestringPayment state (e.g., credited, not_credited, not_credited_yet)

payment_state values:

ValueTransaction Status
not_credited_yetCapture - Accepted
creditedCapture - Successful
not_creditedCapture - Failed

Refunds

Skrill supports only full refunds and can be initiated only on a successful captured transaction.
The request will send a credit note to the authorization system after the customer has already been charged. The refund amount will be credited to the customer and the merchant’s account will be charged.

The refund can be done in two ways:

  • Through API integration
  • Through payabl. dashboard

Endpoint: <sandbox URL>/payment_refund
Request Type: POST
Content-Type: application/x-www-form-urlencoded

Refund Request:

curl --location 'https://service-sandbox.apmgw-dev.payabl.tech/apm_gw/payment_refund' \
  -d merchantid='gateway_test' \
  -d transactionid='1234567' \
  -d currency='EUR' \
  -d amount='30.00' \
  -d signature='1d89cddd413fb0a24b0f08ce7f23bb7494163da1'

Successful Refund Response:

transactionid=4882178213561073688&transid=4882178213561073688&status=0&errormessage=&errmsg=&amount=10.32&price=10.32&currency=EUR&orderid=Payabl-Test

Failed Refund Response:

transactionid=4882178211459825687&transid=4882178211459825687&status=-113&errormessage=Wrong transaction-id&errmsg=Wrong transaction-id&amount=&price=&currency=&orderid=

Payouts

Skrill allows merchants to send funds back to users' wallets.
This can be done for customers who already have a deposit via the Skrill system.

Endpoint: <sandbox URL>/payment_cft
Request Type: POST
Content-Type: application/x-www-form-urlencoded

Payout Request:

email is the beneficiary's Skrill wallet email

curl --location 'https://service-sandbox.apmgw-dev.payabl.tech/apm_gw/payment_cft' \
  -d merchantid='gateway_test' \
  -d amount='10' \
  -d currency='EUR' \
  -d orderid='ORDER-1009' \
  -d language='en' \
  -d signature='f3d4acadec5c9f6a91b83465a87d1c18ddc32232' \
  -d payment_method='216' \
  -d email='[email protected]'

After you send a payout request, the system will validate your current balance. If your balance is sufficient then the transaction will be sent to Skrill for processing.

payabl. will send you a response letting you know if the payout was successful or not.

Payout Successful Response example:

transactionid=4882232740299508400&transid=4882232740299508400&status=0&errormessage=&errmsg=&amount=10.00&price=10.00&orderid=ORDER-1009&currency=EUR&payment_method=216

Payout Failed Response example:

transactionid=4882242633372404829&transid=4882242633372404829&status=-5002&errormessage=ACCOUNT_ID_DOES_NOT_BELONG_TO_CUSTOMER&errmsg=ACCOUNT_ID_DOES_NOT_BELONG_TO_CUSTOMER&amount=1.00&price=1.00&orderid=Cft-Inatec-Test&currency=EUR&payment_method=216

Our Technical Support team is there to help you:
Email: [email protected]
Available Monday – Friday between 09:00 and 17:00 CET/CEST


Did this page help you?