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 type | Wallet |
| Market | Global |
| Customer currencies | Various |
| Processing currencies | Various |
| Refunds | Yes (full refunds only) |
| Payout | Yes |
Step 1. Make a transaction request
From your server, make a POST
https://service-sandbox.apmgw-dev.payabl.tech/apm_gw/payment_preauthorizehttps://api.apmgw-prod.payabl.tech/v1/payment_preauthorizeRequest Type: POST
Content-Type: application/x-www-form-urlencoded
Include in request:
| Parameter | Description | Error Code | Error Message | |
|---|---|---|---|---|
| merchantid* | min. 3 characters | Merchant identification number assigned during account creation | -6001 | No 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 | -6102 | Wrong amount |
| currency* | 3 characters | The currency field contains the alpha-3 currency code for the transaction | -6103 | Wrong currency |
| orderid* | max. 40 characters | The field orderid must be unique for PayPal | -6132 | Wrong order-ID |
| payment_method* | 216 | payabl. payment methods IDs | -6157 | Wrong paymentmethod |
| signature* | 40 characters | Security signature for response validation | ||
| email* | max. 50 characters | Customer’s email | -6119 | Wrong email |
| firstname | max. 100 characters | Customer’s first name | -6113 | Wrong firstname |
| lastname | max. 100 characters | Customer’s last name | -6105 | Wrong lastname |
| country | 3 characters | Customer’s country (alpha-3 format) | -6174 | Wrong country code |
| street | max. 100 characters | Customer’s street address | -6106 | Wrong street |
| city | max. 100 characters | Customer’s city | -6108 | Wrong city |
| state | max. 30 characters | Customer’s state | -6118 | Wrong state |
| zip | min. 3, max. 10 characters | Customer’s ZIP code | -6107 | Wrong zip |
| birthday | DDMMYYYY | The customer’s birthday | -6115 | Wrong birthday |
| language | string (default “en”) | language | -6133 | Wrong customer-language |
| phone | string | phone of the customer | -6120 | Wrong phone |
| url_success | max. 500 characters starting with http or https | Successful transaction redirection URL | -6128 | Wrong url-Success |
| url_failed | max. 500 characters starting with http or https | Failed transaction redirection URL | -6129 | Wrong url-Failed |
| url_return | max. 500 characters starting with http or https | URL for customer redirection | -6134 | Wrong return URL |
| notification_url | max. 500 characters starting with http or https | Notification url | -6173 | Wrong 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 informationDo 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¤cy=EUR&orderid=Payabl-Test&payment_method=216&redirect_url=https%3A%2F%2Fpay.skrill.com%2F%3Fsid%3D9bc57194c3ede8e0c1c97a34e9b0a41eRaw response example - failed transaction:
transactionid=undef&transid=undef&status=-6119&errormessage=Wrong email&errmsg=Wrong email&amount=&price=¤cy=&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:
| Parameter | Type | Description |
|---|---|---|
| transactionid | string | payabl. transaction id |
| transid | string | payabl. transaction id |
| amount | string | Transaction amount |
| price | string | Transaction amount |
| currency | string | Transaction currency |
| status | string | Error code or Request status code (e.g., 2000) |
| errormessage | string | Error message or status message (e.g., pending) |
| errmsg | string | Error message |
| payment_method | string | Payment method identifier |
| orderid | string | Merchant's order identifier |
| redirect_url | string | URL to redirect the customer for payment completion |
Step 2. Handle the redirect
Redirection to
url_returndoes not confirm that the transaction is successful. Always check the transaction vianotification_urlor 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_successorurl_failed.
Redirect Response Example - successful transaction:
transactionid=4882178213561073688×tamp=1771503154&orderid=Payabl-Test&payment_method=216&errormessage=&errorcode=0&type=capture&amount=10.32¤cy=EUR&payment_state=credited&security=cf2dd2ffe8d22b9f84eb341a01d9d54672e56be04bed30a92d0a7850dc754c67Redirect Response Example - failed transaction:
transactionid=4882242633810676830×tamp=1787230781&orderid=Payabl-Test&payment_method=216&errormessage=Cancelled by user&errorcode=110&type=order&amount=1.32¤cy=EUR&payment_state=not_credited&security=1cc8efe888211e9fe9bb73ca76be47b29938626766e59083cd43d84988158ff5Included in response:
| Parameter | Type | Description |
|---|---|---|
| transaction_id | string | Unique transaction identifier |
| amount | string | Transaction amount |
| currency | string | ISO 4217 currency code |
| timestamp | string | Transaction timestamp |
| orderid | string | Merchant's order identifier |
| payment_method | string | Payment method identifier |
| errormessage | string | Human-readable error message |
| errorcode | string | Error code |
| type | string | Transaction type (e.g., order, capture) |
| security | string | Security signature for response validation |
| payment_state | string | Payment state (e.g., credited, not_credited, not_credited_yet) |
payment_state values:
| Value | Transaction Status |
|---|---|
not_credited_yet | Capture - Accepted |
credited | Capture - Successful |
not_credited | Capture - 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¤cy=EUR&orderid=Payabl-TestFailed Refund Response:
transactionid=4882178211459825687&transid=4882178211459825687&status=-113&errormessage=Wrong transaction-id&errmsg=Wrong transaction-id&amount=&price=¤cy=&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¤cy=EUR&payment_method=216Payout 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¤cy=EUR&payment_method=216Our Technical Support team is there to help you:
Email: [email protected]
Available Monday – Friday between 09:00 and 17:00 CET/CEST
Updated about 1 hour ago
