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.
Parameter | Description | Required | Example Value |
---|---|---|---|
action | The required action. In the first step, this is prepare . | Yes | prepare |
email | Your email address. | Yes | info@merchant.com |
password | Lower-case version of your MD5 API/MQI password. | Yes | 9f535b6ae672f627e4a5f79f2b7c63fe |
transaction_id | The transaction ID of the original payment. | Yes/No * | A500123 |
mb_transaction_id | The Skrill transaction ID of the original payment. | Yes/No * | 4585262 |
amount | Amount to be transferred. | Yes | 10.95 |
currency | Currency. For a list of currencies accepted by Skrill Quick Checkout Payouts, see Currencies section. | Yes | EUR |
subject | Subject of the notification email. Up to 250 1-byte characters. | Yes | Your order is ready |
note | Comment to be included in the notification email. Up to 2000 1-byte characters. | Yes | Details are available on our website. |
frn_trn_id | Your reference ID (must be unique if submitted). | No | A1234 |
merchant_fields | A comma-separated list of up to five field names that are passed back to your server when the payment is confirmed. | No | Field1, Field2 |
Field1 | An additional field that you can include containing your own unique parameters. | No | Value1 |
Field2 | An additional field that you can include containing your own unique parameters. | No | Value2 |
status_url | URL 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 | No | https:// www.merchant.com/ update.cqi |
bank_id_code | Code of the payee's/recipient's bank. One of the codes retrieved using the Bank API. | Yes/No **** | 8194 |
bank_account_type | Type of beneficiary bank account. Refer to column "code". Max length: 12. | Yes/No ** | CLABE |
bank_account_number | Bank account number of beneficiary. Max length: 50. | Yes/No ** | 123456789034567896 |
document_type | Type of ID document provided. Refer to column "code". Max length: 3. | Yes/No ** | RFC |
document_number | The identification number of the document. Max length: 50. | Yes/No ** | HEGJ820506M10 |
date_of_birth | The date of birth of the beneficiary in dd-MM-yyyy format. | Yes/No ** | 31-01-2023 |
merchant_client_id | Unique identifier of the Client with the Merchant. Must be an integer. Max length: 50. | Yes/No *** | 123123 |
merchant_client_registration_date | Date of account registration of the Client in ISO8601 format. | Yes/No *** | 2016-08-22T14:30+02:00 |
merchant_client_kyc_level | Verification level of the Client. 0 – not verified, 1 – verified with documents. Max length: 1. | Yes/No *** | 0 |
merchant_client_registration_country | The ISO country code for the user's country. Max length: 3. | Yes/No *** | BRA |
* 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.
Field | Description | Required | Example value |
---|---|---|---|
action | The required action. In the second step, this is the payout 'transfer'. | Yes | transfer |
sid | Session identifier returned in response to the prepare request. | Yes | 5e281d1376d92ba789ca7f0583e045d4 |
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.
Element | Description |
---|---|
amount | Amount paid in the currency of your Skrill account. |
currency | Currency of your Skrill account. |
id | Skrill transaction ID. |
status | Numeric value of the transaction status:-2 = failed2 = processed0 = pending |
status_msg | Textual 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
Code | Official Document Name | Country | Validation Regex | Example |
---|---|---|---|---|
CPF | Cadastro de Pessoas Físicas | Brazil | ^\[0-9]{11}\$ | 11831541021 |
CE | Cedula de Identidad | Chile | ^\[A-Za-z0-9]{9,20}\$ | A1234567890 |
PAS | Pasaporte | Chile | ^\[A-Za-z0-9]{9,20}\$ | CHLAO01001 |
RUN | Rol Único Nacional | Chile | ^\[0-9]{6,8}-\[0-9]{1}\$ | 125319092-2 |
RUT | Rol Único Tributario | Chile | ^\[0-9]{6,8}-\[0-9]{1}\$ | 125319092-2 |
RFC | Registro Federal Contribuyentes | Mexico | ^(\[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 |
DNI | Documento Nacional de Identidad | Peru | ^\[0-9]{8}\$ | 44851534 |
PAS | Pasaporte | Peru | ^\[A-Za-z0-9]{7,12}\$ | 8345627394AB |
CE | Carne de Identidad para Extranjeros | Peru | ^\[A-Za-z0-9]{8,20}\$ | A847635253910 |
Bank Account Types Accepted by Skrill
Code | Description | Country | Validation (regex) | Example |
---|---|---|---|---|
CLABE | Standardized Bank Key or Clave Bancaria Estandarizada | MEX | ^\d{18}\$ | 123456789034567896 |
CPF | CPF | BRA | ^\[0-9]{11}\$ | 11831541602 |
Email | BRA | ^\[a-z0-9.\_%+-]+@\[a-z0-9.-]+.\[a-z]{2,77}\$ | test@test.com | |
Phone | Phone number, without country code | BRA | ^\[0-9]{11}\$ | 31971212883 |
EVP | Random Key | BRA | (\[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 |
Checking | Interbank account number | PER | ^\[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, 813 | 00211111111111111111 |
Savings | Interbank account number | PER | ^\[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, 813 | 00211111111111111111 |
Checking | Interbank account number | CHL | ^\[0-9]{7,20}\$ | 00211111111111111111 |
Savings | Interbank account number | CHL | ^\[0-9]{7,20}\$ | 00211111111111111111 |
Salary | Interbank account number | CHL | ^\[0-9]{7,20}\$ | 00211111111111111111 |
Rut | Rol Único Tributario | CHL | When 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:
Field | Description | Required | Example |
---|---|---|---|
transaction_id | Your reference ID (the frn_trn_id from the request) | Yes/No | 500123 |
mb_transaction_id | Skrill's internal unique reference ID for this transaction | Yes | 5585262 |
merchant_id | Unique lD of your Skrill account; needed to calculate the MD5 signature. | Yes | 1392345 |
amount | Payment amount posted in your HTTP request | Yes | 2 |
currency | Payment currency posted in your HTTP request | Yes | EUR |
status | 2 = Processed-2 = Failed | Yes | 2 |
mb_amount | Amount in your Skrill account currency | Yes | 9.99 |
mb_currency | Skrill account currency | Yes | EUR |
md5sig | Upper-case MD5 signature. See MD5 signature. | Yes | 9F535B6AE672F527E4A5F79F2B7C63FE |
sha2sig | Upper-case Sha2 signature (not available by default; request enablement at merchantservices@skrill.com) | No | DBB7101322257A311F0SD1C527053058FC7E464E30BCFB4613F09053C22DD1F8 |
pay_to_email | Your email address | Yes | info@merchant.com |
pay_from_email | Email address of the customer to whom the funds are being sent | Yes | payer123@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:
Value | Description | Example |
---|---|---|
merchant_id | Your Skrill account user ID | 4637827 |
mb_transaction_id | The new Skrill transaction ID | 5585262 |
MD5 of secret word | The upper-case MD5 value of the secret word submitted in the Settings > Developer Settings section of your Skrill account. | 327638C253A4637199CEBA6642 371F20 |
mb_amount | Amount refunded in the currency of your account. | 9.99 |
mb_currency | Currency of your account. | EUR |
status | The 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¤cy=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}¤cy={currency}'
By merchant processing e-mail:
curl --location --globoff 'https://pay.skrill.com/banks?paymentOption={paymentOption}&merchantEmail={merchantEmail}&countryId={countryId}&amount={amount}¤cy={currency}'
Parameters:
Parameter | Description | Required | Example value |
---|---|---|---|
paymentOption | Payment option | Yes | ONB |
countryId | Skrill country ID | Yes | CHL |
merchantId | Merchant ID | Yes/No * | 1001 |
merchantEmail | Merchant processing e-mail | Yes/No * | skrill@merchant.com |
currency | Payment amount currency | Yes | CLP |
amount | Payment amount | Yes | 10000 |
* Provide either merchantId or merchantEmail.
Response:
20 OK
[
{
"id": "8194",
"name": "Banco Estado"
},
{
"id": "8457",
"name": "Scotiabank Chile"
}
]
Error codes:
Response Code | Error Message | Description |
---|---|---|
400 | Field error(s) | Missing required field |
400 | Invalid countryId: {countryId} | Provided Skrill country ID is invalid |
400 | Invalid merchant | Provided merchant ID or merchant processing e-mail does not exist |
400 | Invalid amount | Provided amount is not valid |
400 | Unknown currency: {currency} | Provided currency is not valid |
400 | Payment method not available: {paymentOption} | Payment method is not supported for this payment |