Skip to main content

Send Money

You can send money using the Skrill Automated Payments Interface (API). This offers the same functionality that is available on My Account, but it allows you to automate the sending of payment details from your servers to Skrill using an HTTPS request to the following URL:

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

The process consists of two steps:

  • Sending a transfer preparation request to initiate a session which lasts 15 minutes
  • Executing the transfer within the session

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

Send money

Using a multi-currency account, Skrill automatically debits the account matching the currency of the send money request. If the currency specified in the request is not supported by your merchant account, the primary currency account will be debited.

Executing a Transfer Preparation Request

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 merchant account email address.Yesinfo@merchant.com
passwordYour MD5 API/MQI password.Yes9f535b6ae672f627e4a5f79f2b7c63fe
amountAmount to be transferred.Yes10.95
currencyCurrency. For a list of currencies accepted by Skrill, see Currencies section.YesEUR
bnf_emailRecipient's (beneficiary's) email address.Yescustomer@host.com
subjectSubject of the notification email. Up to 250 1-byte characters.NoYour order is ready
noteComment to be included in the notification email. Up to 2000 1-byte characters.NoDetails are available on our website.
frn_trn_idYour reference ID (must be unique if submitted).NoA1234
account_idYour currency account ID. For more information, see Separating balances by fund origin.No1234567

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 authorisation and payment preparation is successful. The Session ID must be submitted in your transfer execution request.
  • <error> element – included if an error occurs. It includes an <error_msg> element, which contains the error message description.

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=6b4c1ba48880bcd3341dbaeb68b2647f' \
--data-urlencode 'amount=1.2' \
--data-urlencode 'currency=EUR' \
--data-urlencode 'bnf_email=beneficiary@domain.com' \
--data-urlencode 'subject=some_subject' \
--data-urlencode 'note=some_note' \
--data-urlencode 'frn_trn_id=111'

Response:

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

Example 2: Failed Preparation Request

This example shows a request that failed, due to a missing amount parameter.

Request:

curl --location 'https://www.skrill.com/app/pay.pl?action=prepare&email=merchant%40host.com&password=6b4c1ba48880bcd3341dbaeb68b2647f&currency=EUR&bnf_email=beneficiary%40domain.com&subject=some_subject&note=some_note&frn_trn_id=111'

Response:

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

Example 3: Failed with Error LOCK_LEVEL_9

This example shows a request that failed because a Skrill Wallet merchant account with 1-Tap enabled is locked following more than three failed login attempts.

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=6b4c1ba48880bcd3341dbaeb68b2647f' \
--data-urlencode 'currency=EUR' \
--data-urlencode 'bnf_email=beneficiary@domain.com' \
--data-urlencode 'subject=some_subject' \
--data-urlencode 'note=some_note' \
--data-urlencode 'frn_trn_id=111'

Response:

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

To clear the error, reset the password for the merchant account; and then reconfigure your API/MQI password, which is the MD5 hash of your merchant password, before making any further prepare requests.

note

In some situations you will not be able to reset the password, in which case you should contact merchantservices@skrill.com.

Executing a Transfer Request

Request

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

ParameterDescriptionRequired?Example Value
actionThe required action. In the second step, this is transfer.Yestransfer
sidSession identifier returned in response to the prepare request.Yes5e281d1376d92ba789ca7f0583e045d4

Response

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

  • <transaction> element – returned if the transfer is successful; the response includes the elements described in yhe table below.
  • <error> element – returned if an error occurs, which includes an <error_msg> element, which provides details of the error.
FieldDescription
AmountAmount paid in the currency of your Skrill account.
CurrencyCurrency of your Skrill account.
IdTransaction ID.
StatusNumeric value of the transaction status:
1 – scheduled (if beneficiary is not yet registered at Skrill)
2 - processed (if beneficiary is registered)
status_msgText value of the transaction status.

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>

Reposting a Transfer Request

If there is a communication error during the transfer, you must resend the transfer request within 15 minutes of the previous request, before the session expires.

note

The Skrill server executes only one transaction per session, so the request cannot be duplicated.

The outcome of reposting a transfer request depends on the transfer execution status:

  • If the transaction has already been executed within this session you will need to generate a new Session ID, since only one transaction is allowed per session.
  • If the transaction associated with this session is still being executed, Skrill responds with status EXECUTION_PENDING. In this case you do not need to generate a new session ID and can wait for the response.