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.
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.
Parameter | Description | Required | Example Value |
---|---|---|---|
action | The required action. In the first step, this is prepare . | Yes | prepare |
email | Your merchant account email address. | Yes | info@merchant.com |
password | Your MD5 API/MQI password. | Yes | 9f535b6ae672f627e4a5f79f2b7c63fe |
amount | Amount to be transferred. | Yes | 10.95 |
currency | Currency. For a list of currencies accepted by Skrill, see Currencies section. | Yes | EUR |
bnf_email | Recipient's (beneficiary's) email address. | Yes | customer@host.com |
subject | Subject of the notification email. Up to 250 1-byte characters. | No | Your order is ready |
note | Comment to be included in the notification email. Up to 2000 1-byte characters. | No | Details are available on our website. |
frn_trn_id | Your reference ID (must be unique if submitted). | No | A1234 |
account_id | Your currency account ID. For more information, see Separating balances by fund origin. | No | 1234567 |
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¤cy=EUR&bnf_email=beneficiary%40domain.com&subject=some_subject¬e=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.
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.
Parameter | Description | Required? | Example Value |
---|---|---|---|
action | The required action. In the second step, this is transfer . | Yes | transfer |
sid | Session identifier returned in response to the prepare request. | Yes | 5e281d1376d92ba789ca7f0583e045d4 |
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.
Field | Description |
---|---|
Amount | Amount paid in the currency of your Skrill account. |
Currency | Currency of your Skrill account. |
Id | Transaction ID. |
Status | Numeric value of the transaction status:1 – scheduled (if beneficiary is not yet registered at Skrill)2 - processed (if beneficiary is registered) |
status_msg | Text 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.
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.