Skip to main content

Quick Checkout Payouts

Quick Checkout payouts enable Skrill gambling merchants to transfer funds (such as winnings) to their customers by referencing an original QCO transaction (payment) made on the gateway. Since the money is sent directly to the payment instrument used for the original payment, the customer does not need a Skrill Wallet account.

Restrictions: Quick Checkout payouts functionality is available only for:

  • Rapid Transfer payments
  • NETELLER payments
  • Paysafecard payments
  • Bank Payouts (EMEA, NA, LATAM)
  • Giropay payments
  • Sofort payments

Merchants wishing to use the Quick Checkout payouts facility need to have this functionality enabled on their account by the Merchant Services team.

Quick Checkout payouts use an extension to the Automated Payments Interface (API), and are implemented by sending an HTTPs request to the following URL:

https://www.skrill.com/app/pay.pl

The process consists of two steps:

  • Sending a payout prepare request to initiate a session
  • Executing the Quick Checkout payout within the session

After each step Skrill returns an XML response that contains the result of the performed action.

Executing a Payout Preparation Request

You must include the parameters described below in your HTTPs request.

ParameterDescriptionRequiredExample Value
actionThe required action. In the first step, this is prepare.Yesprepare
emailYour email address.Yesinfo@merchant.com
passwordLower-case version of your MD5 API/MQI password.Yes9f535b6ae672f627e4a5f79f2b7c63fe
transaction_idThe transaction ID of the original payment.Yes/No *A500123
mb_transaction_idThe Skrill transaction ID of the original payment.Yes/No *4585262
amountAmount to be transferred.Yes10.95
currencyCurrency. For a list of currencies accepted by Skrill Quick Checkout Payouts, see Currencies section.YesEUR
subjectSubject of the notification email. Up to 250 1-byte characters.YesYour order is ready
noteComment to be included in the notification email. Up to 2000 1-byte characters.YesDetails are available on our website.
frn_trn_idYour reference ID (must be unique if submitted).NoA1234
merchant_fieldsA comma-separated list of up to five field names that are passed back to your server when the payment is confirmed.NoField1, Field2
Field1An additional field that you can include containing your own unique parameters.NoValue1
Field2An additional field that you can include containing your own unique parameters.NoValue2
status_urlURL or email address to which status updates should be sent. The following ports can be used for this URL:
80, 81, 82, 83, 88, 90, 178, 419, 433,
443, 444, 448, 451, 666, 800, 888,
1025, 1430, 1680, 1888, 1916, 1985,
2006, 2221, 3000, 4111, 4121, 4423,
4440, 4441, 4442, 4443, 4450, 4451,
4455, 4567, 5443, 5507, 5653, 5654,
5656, 5678, 6500, 7000, 7001, 7022,
7102, 7777, 7878, 8000, 8001, 8002,
8011, 8014, 8015, 8016, 8027, 8070,
8080, 8081, 8082, 8085, 8086, 8088,
8090, 8097, 8180, 8181, 8443, 8449,
8680, 8843, 8888, 8989, 9006, 9088,
9443, 9797, 10088, 10443, 12312,
18049, 18079, 18080, 18090, 18443,
20202, 20600, 20601, 20603, 20607,
20611, 21301, 22240, 26004, 27040,
28080, 30080, 37208, 37906, 40002,
40005, 40080, 50001, 60080, 60443
Nohttps:// www.merchant.com/ update.cqi
bank_id_codeCode of the payee's/recipient's bank. One of the codes retrieved using the Bank API.Yes/No ****8194
bank_account_typeType of beneficiary bank account. Refer to column "code". Max length: 12.Yes/No **CLABE
bank_account_numberBank account number of beneficiary. Max length: 50.Yes/No **123456789034567896
document_typeType of ID document provided. Refer to column "code". Max length: 3.Yes/No **RFC
document_numberThe identification number of the document. Max length: 50.Yes/No **HEGJ820506M10
date_of_birthThe date of birth of the beneficiary in dd-MM-yyyy format.Yes/No **31-01-2023
merchant_client_idUnique identifier of the Client with the Merchant. Must be an integer. Max length: 50.Yes/No ***123123
merchant_client_registration_dateDate of account registration of the Client in ISO8601 format.Yes/No ***2016-08-22T14:30+02:00
merchant_client_kyc_levelVerification level of the Client. 0 – not verified, 1 – verified with documents. Max length: 1.Yes/No ***0
merchant_client_registration_countryThe ISO country code for the user's country. Max length: 3.Yes/No ***BRA
info

* You must submit either transaction_id or mb_transaction_id.
If you accidentally include a bnf_email parameter in your prepare request (which is used when preparing to send money, as described on page 8), the subsequent transfer action sends money to a Skrill balance account instead of making a Quick Checkout payout.
** Required for Bank Payouts to LATAM
*** Applicable only for some payment options. Merchant Client fields are used for additional risk screening.
**** Required for Bank Payouts to Chile and Ecuador.

Response

Skrill returns an XML response to your request, which contains a <response> element containing one of the following elements:

  • <sid> element - returned if the authorization and payment preparation is successful. The Session ID must be submitted in your payout execution request.
  • <error> element – included if an error occurs. It includes an <error_msg> element, which contains the error message description. For an explanation of this message, see Errors when validating parameters and Errors during log in tables.

Example 1: Successful Preparation Request

Request:

curl --location 'https://www.skrill.com/app/pay.pl' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'action=prepare' \
--data-urlencode 'email=merchant@host.com' \
--data-urlencode 'password=8bcf2ad23abdc7f4b8e65efaadf71e19' \
--data-urlencode 'amount=10' \
--data-urlencode 'currency=AED' \
--data-urlencode 'subject=subject' \
--data-urlencode 'note=note' \
--data-urlencode 'frn_trn_id=my-frn-trn-1' \
--data-urlencode 'mb_transaction_id=194573960'

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<sid>5e281d1376d92ba789ca7f0583e045d4</sid>
</response>

Example 2: Failed Preparation Request

Request:

curl --location 'https://www.skrill.com/app/pay.pl' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'action=prepare' \
--data-urlencode 'email=merchant@host.com' \
--data-urlencode 'password=8bcf2ad23abdc7f4b8e65efaadf71e19' \
--data-urlencode 'amount=10' \
--data-urlencode 'currency=AED' \
--data-urlencode 'subject=subject' \
--data-urlencode 'note=note' \
--data-urlencode 'frn_trn_id=my-frn-trn-1' \
--data-urlencode 'mb_transaction_id=194573960'

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<error>
<error_msg>MISSING_AMOUNT</error_msg>
</error>
</response>

Executing a Payout Transfer Request

Your web servers should include the Session ID provided in the XML response from Skrill in the payout transfer execution request, as described below.

FieldDescriptionRequiredExample value
actionThe required action. In the second step, this is the payout 'transfer'.Yestransfer
sidSession identifier returned in response to the prepare request.Yes5e281d1376d92ba789ca7f0583e045d4

Response

The XML response contains a <response> element that includes either of the following elements:

  • <transaction> element – returned if the payout transfer is successful; the response includes the elements described in the table below.
  • <error> element – returned if an error occurs, and includes an <error_msg> element, which provides details of the error. This is shown in Errors when validating parameters and Errors when validating payment details tables.
ElementDescription
amountAmount paid in the currency of your Skrill account.
currencyCurrency of your Skrill account.
idSkrill transaction ID.
statusNumeric value of the transaction status:
-2 = failed
2 = processed
0 = pending
status_msgTextual transaction status.
error_msg- BALANCE_NOT_ENOUGH – payout amount exceeds account balance
- ORIGINAL_PAYMENT_NOT_PROCESSED – referenced transaction was not processed
- ORIGINAL_PAYMENT_UNSUPPORTED_FOR_PAYOUT – payment method used for the referenced transaction is not supported for payouts
- GENERIC_ERROR – other errors not covered above

Example: Successful Transfer Request

Request:

curl --location 'https://www.skrill.com/app/pay.pl' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'action=transfer' \
--data-urlencode 'sid=5e281d1376d92ba789ca7f0583e045d4'

Response:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<transaction>
<amount>1.20</amount>
<currency>EUR</currency>
<id>497029</id>
<status>2</status>
<status_msg>processed</status_msg>
</transaction>
</response>

Document Types Accepted by Skrill

CodeOfficial Document NameCountryValidation RegexExample
CPFCadastro de Pessoas FísicasBrazil^\[0-9]{11}\$11831541021
CECedula de IdentidadChile^\[A-Za-z0-9]{9,20}\$A1234567890
PASPasaporteChile^\[A-Za-z0-9]{9,20}\$CHLAO01001
RUNRol Único NacionalChile^\[0-9]{6,8}-\[0-9]{1}\$125319092-2
RUTRol Único TributarioChile^\[0-9]{6,8}-\[0-9]{1}\$125319092-2
RFCRegistro Federal ContribuyentesMexico^(\[A-ZÑ&]{4}) ?(?:- ?)?(\d{2}(?:0\[1-9]|1\[0-2])(?:0\[1-9]|\[12]\d|3\[01])) ?(?:- ?)?(\[A-Z\d]{2})(\[A\d])\$HEGJ820506M10
DNIDocumento Nacional de IdentidadPeru^\[0-9]{8}\$44851534
PASPasaportePeru^\[A-Za-z0-9]{7,12}\$8345627394AB
CECarne de Identidad para ExtranjerosPeru^\[A-Za-z0-9]{8,20}\$A847635253910

Bank Account Types Accepted by Skrill

CodeDescriptionCountryValidation (regex)Example
CLABEStandardized Bank Key or Clave Bancaria EstandarizadaMEX^\d{18}\$123456789034567896
CPFCPFBRA^\[0-9]{11}\$11831541602
EmailEmailBRA^\[a-z0-9.\_%+-]+@\[a-z0-9.-]+.\[a-z]{2,77}\$test@test.com
PhonePhone number, without country codeBRA^\[0-9]{11}\$31971212883
EVPRandom KeyBRA(\[0-9a-f]{8}-\[0-9a-f]{4}-\[0-9a-f]{4}-\[0-9a-f]{4}-\[0-9a-f]{12})23e05112-0dfd-4c2b-b433-d6420967dbbe
CheckingInterbank account numberPER^\[0-9]{20}\$<br/>must start with 002, 003, 007, 009, 011, 018, 023, 035, 038, 049, 053, 054, 055, 056, 058, 059, 060, 800, 801, 802, 803, 805, 806, 808, 809, 811, 81300211111111111111111
SavingsInterbank account numberPER^\[0-9]{20}\$<br/>must start with 002, 003, 007, 009, 011, 018, 023, 035, 038, 049, 053, 054, 055, 056, 058, 059, 060, 800, 801, 802, 803, 805, 806, 808, 809, 811, 81300211111111111111111
CheckingInterbank account numberCHL^\[0-9]{7,20}\$00211111111111111111
SavingsInterbank account numberCHL^\[0-9]{7,20}\$00211111111111111111
SalaryInterbank account numberCHL^\[0-9]{7,20}\$00211111111111111111
RutRol Único TributarioCHLWhen the provided bank_id_code is for "Banco Estado", the provided document_type is RUT and the bank_account_type is Rut:
1. the prefix of bank_account_number must be the same as the prefix of the RUT document_number. (For example, if provided RUT document_number is 12345678-9, the bank_account_number should start with 12345678)
2. the length of the bank account number must be from 8 to 11 digits
In other cases:
- the length of the bank account number must be 7 to 20 digits (^[0-9]{7,20}$)
When:
bank_id_code=012, document_type=RUT, document_number=12345678-9, bank_account_type=Rut, bank_account_number=12345678
All other cases:
00211111111111111111

Payout Status Report

If the payment transfer API returns a pending status (0), then whenever the status of the transaction changes, Skrill sends details of the change to the status_url provided in your payment request using a standard HTTP POST. The Skrill server continues to post the status until it receives an HTTP OK (200) response from your server, or until it has posted more than 10 times. The table below shows the parameters sent to your status_url page:

FieldDescriptionRequiredExample
transaction_idYour reference ID (the frn_trn_id from the request)Yes/No500123
mb_transaction_idSkrill's internal unique reference ID for this transactionYes5585262
merchant_idUnique lD of your Skrill account; needed to calculate the MD5 signature.Yes1392345
amountPayment amount posted in your HTTP requestYes2
currencyPayment currency posted in your HTTP requestYesEUR
status2 = Processed
-2 = Failed
Yes2
mb_amountAmount in your Skrill account currencyYes9.99
mb_currencySkrill account currencyYesEUR
md5sigUpper-case MD5 signature. See MD5 signature.Yes9F535B6AE672F527E4A5F79F2B7C63FE
sha2sigUpper-case Sha2 signature (not available by default; request enablement at merchantservices@skrill.com)NoDBB7101322257A311F0SD1C527053058FC7E464E30BCFB4613F09053C22DD1F8
pay_to_emailYour email addressYesinfo@merchant.com
pay_from_emailEmail address of the customer to whom the funds are being sentYespayer123@skrill.com

MD5 Signature

The md5sig parameter consists of an MD5 sum on a string built by concatenating the following parameters and converting the result to upper-case:

ValueDescriptionExample
merchant_idYour Skrill account user ID4637827
mb_transaction_idThe new Skrill transaction ID5585262
MD5 of secret wordThe upper-case MD5 value of the secret word submitted in the Settings > Developer Settings section of your Skrill account.327638C253A4637199CEBA6642
371F20
mb_amountAmount refunded in the currency of your account.9.99
mb_currencyCurrency of your account.EUR
statusThe status of the refund transaction.2

Example

fields = [merchant_id, mb_transaction_id, Digest::MD5.hexdigest(secret).upcase, mb_amount, mb_currency, status].join
md5sig == Digest::MD5.hexdigest(fields).upcase

Using the example values in the MD5 signature parameters table, the following MD5 code is returned: CF9DCA614656D19772ECAB978A56866D.

Response:

merchant_id=290186320&transaction_id=200366670&mb_transaction_id=200366670&mb_amoun t=74.218786&mb_currency=GBP&status=2&md5sig=3ED76725C3E3CE6CE25F16F01BDFDF1D&amount=80.0&pay_from_email=payer%40gmail.com&pay_to_email=merchant%40info.com&currency=EUR

Bank API

Fetch available banks for LATAM Bank payouts.

By merchant ID:

curl --location --globoff 'https://pay.skrill.com/banks?paymentOption={paymentOption}&merchantId={merchantId}&countryId={countryId}&amount={amount}&currency={currency}'

By merchant processing e-mail:

curl --location --globoff 'https://pay.skrill.com/banks?paymentOption={paymentOption}&merchantEmail={merchantEmail}&countryId={countryId}&amount={amount}&currency={currency}'

Parameters:

ParameterDescriptionRequiredExample value
paymentOptionPayment optionYesONB
countryIdSkrill country IDYesCHL
merchantIdMerchant IDYes/No *1001
merchantEmailMerchant processing e-mailYes/No *skrill@merchant.com
currencyPayment amount currencyYesCLP
amountPayment amountYes10000
info

* Provide either merchantId or merchantEmail.

Response:

20 OK

[
{
"id": "8194",
"name": "Banco Estado"
},
{
"id": "8457",
"name": "Scotiabank Chile"
}
]

Error codes:

Response CodeError MessageDescription
400Field error(s)Missing required field
400Invalid countryId: {countryId}Provided Skrill country ID is invalid
400Invalid merchantProvided merchant ID or merchant processing e-mail does not exist
400Invalid amountProvided amount is not valid
400Unknown currency: {currency}Provided currency is not valid
400Payment method not available: {paymentOption}Payment method is not supported for this payment