Search Overlay

ePay via Skrill Quick Checkout

ePay is an eWallet that consumers can use to pay utility bills or transfer money online. Consumers register their debit or credit card when signing up for an ePay account, and may use it to top up their balance. Consumers can then make a payment directly from their eWallet. Their eWallet must be topped up before they can make a payment.

ePay at a glance

Payment type

eWallet

Consumer markets

Bulgaria

Currencies
  • Consumer currency:  EUR
  • Processing currency:  EUR
Transaction types
  • Payments:  YES
  • Payouts:  NO
  • Refunds:  NO
  • Partial refunds:  NO
  • Chargebacks/ reversals:  NO
  • Recurring payments:  NO
Limits

600 EUR per transaction

Guarantee YES (optional)
Reporting You can review your transactions in the Skrill Merchant Portal.
Funding For all payments, Paysafe settles the net amount (payments - fees) directly to your bank account.
Supported languages EN, BG
Dynamic descriptor NO

Prerequisites

To create accounts in both the sandbox and production environments, we need the following details:

  • Your Skrill Pay to email address.

  • Your Skrill account API/MQI password.

NOTE: To offer ePay, you must be onboarded with Skrill.

Integration options

We offer the following integration options for ePay:

Payments API:  YES

Paysafe Checkout:  NO

Paysafe JS:  NO

Mobile SDKs:  NO

Best practice

We recommend that you follow these best practice guidelines:

  • Use a webhook or query so that you always know the latest status - for example, you cannot rely on the consumer returning to your website as some consumers may close their browser.
  • To pay with ePay, the consumer must have a sufficient balance in their ePay wallet. You may advise them to top up their wallet before initiating the payment.

Use case 1: Payments

This use case enables your consumer to choose ePay as a payment option on your webstore and to make a payment.

Implementation

Call the following endpoints in sequence:

  1. /paymenthub/v1/paymenthandles

    Initializes the payment process and provides you with a URL to redirect the consumer.

    Redirect the consumer to the provided URL so that they can complete the payment over ePay from their eWallet, or from the credit or debit card linked to their account.

  2. /paymenthub/v1/payments
    Call the payments endpoint to complete the payment within 15 minutes - after this, the payment handle expires.

NOTE: For code examples and detailed explanations of the parameters, refer to the Payments API Reference.

STEP 1: Call paymenthandles

  • Call endpoint /paymenthub/v1/paymenthandles

    • transactionType:  PAYMENT
    • paymentType:  EPAY
  • Pass the required parameters in the profile object.

  • Paysafe creates a payment handle and returns our standard gateway response, indicating either a positive or negative outcome.

    Happy path: consumer initiates payment

    Outcome Paysafe
    HTTP
    Status Code
    LPM Error
    Code/ Message
    Can be
    simulated?
    How to
    simulate?
    Payment
    handle
    status
    Next
    action
    The consumer
    initiates a payment
    request.

    201

     

    YES

    Pass INTERNAL
    as the simulator
    field value in your
    request header.

    INITIATED

    Go to step 2 to
    redirect and
    complete the
    payment.

  • The payment handle status depends on the outcome of the request:

    • For positive scenarios, the payment handle is created with status INITIATED.
    • For negative scenarios, the payment handle is created with status FAILED.

STEP 2: Redirect consumer

  • Redirect the consumer to the URL provided in the payment handle response.

    • The payment handle status changes to PROCESSING.
  • The consumer completes the transaction by logging in to their ePay wallet.

    • The payment handle status changes to PAYABLE.
  • Paysafe returns our standard gateway response, indicating either a positive or negative outcome:

    Happy path: the payment was successful

    Outcome Paysafe
    HTTP
    Status Code
    LPM Error
    Code/ Message
    Can be
    simulated?
    How to
    simulate?
    Payment
    handle
    status
    Next
    action
    The payment
    is authorized.

     

     

    YES

    Pass INTERNAL
    as the simulator
    field value in your
    request header.

    Select COMPLETED
    in the payment
    status dropdown.

    PAYABLE

    Go to step 3 to
    process the
    payment.

    Unhappy path: the payment was declined by Skrill's provider/ internal fraud engine

    Outcome Paysafe
    HTTP
    Status Code
    LPM Error
    Code/ Message
    Can be
    simulated?
    How to
    simulate?
    Payment
    handle
    status
    Next
    action
    The payment
    is declined
    i.e. it fails.

     

     

    YES

    Pass INTERNAL
    as the simulator
    field value in your
    request header.

    Select FAILED
    in the payment
    status
    dropdown.

    FAILED

     

  • The payment handle status depends on the outcome:

    • For positive scenarios, the status changes to PAYABLE.
    • For negative scenarios, the status changes to FAILED.

STEP 3: Call payments

  • Call endpoint /paymenthub/v1/payments using the paymentHandleToken.

  • Paysafe returns our standard gateway response, indicating either a positive or negative outcome:

    Happy path: the payment is successfully submitted

    Outcome Paysafe
    HTTP
    Status Code
    LPM Error
    Code/ Message
    Can be
    simulated?
    How to
    simulate?
    Payment
    handle
    status
    Next
    action
    The payment
    is completed.

    201

     

    YES

    Pass INTERNAL
    as the simulator
    field value in your
    request header.

    Select COMPLETED
    in the payment
    status dropdown.

    COMPLETED

     

  • The payment status depends on the outcome of the request:

    • For positive scenarios, the status changes to COMPLETED.
    • For negative scenarios, the status changes to FAILED.
    • For negative scenarios where the token expires after 15 minutes, the status changes to EXPIRED.

Webhooks

You receive a webhook when the payment handle status or payment status changes. You can also look up the status by executing a GET payment handle or GET payment call.

Payment handle status Payment status Event

PROCESSING

-

The consumer has been redirected to the redirection link.

PAYABLE

 -

The consumer successfully authorized the transaction by logging in to their ePay wallet.

COMPLETED

COMPLETED

You initiated the payments call and the transaction was successful.

COMPLETED

FAILED

You initiated the payments call and the transaction failed.

NOTE:  Regardless of the payments call response status, the payment handle status always changes to COMPLETED when a payments call is made.

FAILED

-

The payment handle was created, and the consumer was redirected to ePay. However, the consumer either abandoned the transaction or failed to authorize it.

EXPIRED

-

The payment handle has expired because it was not used in the payments call within 15 minutes (TTL). 

GET calls

Use the following GET calls to look up the payment handle or payment status:

  • GET payment handle using the payment handle ID returned in the response to your original /paymenthandles call.

    Test: https://api.test.paysafe.com:443/paymenthub/v1/paymenthandles/<paymentHandleId>
    Production: https://api.paysafe.com:443/paymenthub/v1/paymenthandles/<paymentHandleId>

 

  • GET payment handle using the merchant reference number returned in the response to your original /paymenthandles call.

    Testhttps://api.test.paysafe.com:443/paymenthub/v1/paymenthandles?merchantRefNum=<merchantrefNum>
    Production: https://api.paysafe.com:443/paymenthub/v1/paymenthandles?merchantRefNum=<merchantrefNum>

 

  • GET payment using the payment ID returned in the response to your original /payments call.

    Test: https://api.test.paysafe.com:443/paymenthub/v1/payments/<paymentId>
    Production: https://api.paysafe.com:443/paymenthub/v1/payments/<paymentId>

 

  • GET payment using the merchant reference number returned in the response to your original /payments call.

    Test: https://api.test.paysafe.com:443/paymenthub/v1/payments?merchantRefNum=<merchantrefNum>
    Production: https://api.paysafe.com:443/paymenthub/v1/payments?merchantRefNum=<merchantrefNum>

Example webhook packets for payments

{
"payload": {
"accountId": "1026527631",
"id": "66523323-afd4-4305-9f5a-a7c75c5af42d",
"merchantRefNum": "cedcac83-4fd8-4945-a642-86288a5969c6",
"paymentHandleToken": "PHSquWevMlGqJ7Mt",
"transactionType": "PAYMENT",
"amount": 100,
"currencyCode": "EUR",
"status": "PROCESSING",
"paymentType": "EPAY",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"zip": "123456",
"city": "Toronto",
"country": "CA"
},
"statusTime": "2026-02-23T11:34:23Z",
"updatedTime": "2026-02-23T11:34:23Z",
"gatewayReconciliationId": "12329d19-c53e-4d55-a66c-c7aa6f81653d",
"customerIp": "172.0.0.1",
"profile": {
"firstName": "kranthi",
"lastName": "kumar",
"email": "test@paysafe.com",
"dateOfBirth": {
"day": 1,
"month": 1,
"year": 1901
},
"phone": "1234567890"
},
"usage": "SINGLE_USE",
"executionMode": "SYNCHRONOUS",
"gatewayResponse": {
"processor": "SKRILL_QCO",
"sid": "9eea5af5fb5370f3730cb18b1e6d4157"
},
"txnTime": "2026-02-23T11:34:09Z"
},
"eventType": "PAYMENT_HANDLE_PROCESSING",
"attemptNumber": "1",
"resourceId": "66523323-afd4-4305-9f5a-a7c75c5af42d",
"eventDate": "2026-02-23T11:34:09Z",
"links": [
{
"href": "https://api.qa.paysafe.com/alternatepayments/v1/accounts/1026527631/paymenthandles/66523323-afd4-4305-9f5a-a7c75c5af42d",
"rel": "payment_handle"
}
],
"mode": "live",
"eventName": "PAYMENT_HANDLE_PROCESSING"
}

{
"payload": {
"accountId": "1026527631",
"id": "baff51f4-009d-42a3-b146-218075ae7e35",
"merchantRefNum": "5a462240-1960-4c50-95ca-664c7bb62a4f",
"paymentHandleToken": "PHIvU9KQvPo2BVbb",
"transactionType": "PAYMENT",
"amount": 100,
"currencyCode": "EUR",
"status": "PAYABLE",
"paymentType": "EPAY",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"zip": "123456",
"city": "Toronto",
"country": "CA"
},
"statusTime": "2026-02-23T11:35:14Z",
"updatedTime": "2026-02-23T11:35:14Z",
"gatewayReconciliationId": "700994c0-2171-4c92-b117-6fd8f051f931",
"customerIp": "172.0.0.1",
"profile": {
"firstName": "kranthi",
"lastName": "kumar",
"email": "test@paysafe.com",
"dateOfBirth": {
"day": 1,
"month": 1,
"year": 1901
},
"phone": "1234567890"
},
"usage": "SINGLE_USE",
"executionMode": "SYNCHRONOUS",
"gatewayResponse": {
"transaction_id": "700994c0-2171-4c92-b117-6fd8f051f931",
"amount": "1.0",
"merchant_id": "982842053",
"payerIban": "c0320c31685941d883d546d6a08c97e1",
"processor": "SKRILL_QCO",
"sid": "894ba8ac15a248578b63e4f6b08f20ba",
"mb_transaction_id": "1262997306",
"pay_from_email": "fake@email.com",
"pay_to_email": "elvisstoyanov.qco@sun-fish.com",
"payerName": "kranthi kumar",
"currency": "EUR",
"id": "1262997306",
"status": "2"
},
"txnTime": "2026-02-23T11:34:58Z"
},
"eventType": "PAYMENT_HANDLE_PAYABLE",
"attemptNumber": "1",
"resourceId": "baff51f4-009d-42a3-b146-218075ae7e35",
"eventDate": "2026-02-23T11:34:58Z",
"links": [
{
"href": "https://api.qa.paysafe.com/alternatepayments/v1/accounts/1026527631/paymenthandles/baff51f4-009d-42a3-b146-218075ae7e35",
"rel": "payment_handle"
}
],
"mode": "live",
"eventName": "PAYMENT_HANDLE_PAYABLE"
}

{
"payload": {
"accountId": "1026527631",
"id": "baff51f4-009d-42a3-b146-218075ae7e35",
"merchantRefNum": "5a462240-1960-4c50-95ca-664c7bb62a4f",
"paymentHandleToken": "PHIvU9KQvPo2BVbb",
"transactionType": "PAYMENT",
"amount": 100,
"currencyCode": "EUR",
"status": "COMPLETED",
"paymentType": "EPAY",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"zip": "123456",
"city": "Toronto",
"country": "CA"
},
"statusTime": "2026-02-23T11:37:00Z",
"updatedTime": "2026-02-23T11:37:00Z",
"gatewayReconciliationId": "700994c0-2171-4c92-b117-6fd8f051f931",
"customerIp": "172.0.0.1",
"profile": {
"firstName": "kranthi",
"lastName": "kumar",
"email": "test@paysafe.com",
"dateOfBirth": {
"day": 1,
"month": 1,
"year": 1901
},
"phone": "1234567890"
},
"usage": "SINGLE_USE",
"executionMode": "SYNCHRONOUS",
"gatewayResponse": {
"transaction_id": "700994c0-2171-4c92-b117-6fd8f051f931",
"amount": "1.0",
"merchant_id": "982842053",
"payerIban": "c0320c31685941d883d546d6a08c97e1",
"processor": "SKRILL_QCO",
"sid": "894ba8ac15a248578b63e4f6b08f20ba",
"mb_transaction_id": "1262997306",
"pay_from_email": "fake@email.com",
"pay_to_email": "elvisstoyanov.qco@sun-fish.com",
"payerName": "kranthi kumar",
"currency": "EUR",
"id": "1262997306",
"status": "2"
},
"txnTime": "2026-02-23T11:34:58Z"
},
"eventType": "PAYMENT_HANDLE_COMPLETED",
"attemptNumber": "1",
"resourceId": "baff51f4-009d-42a3-b146-218075ae7e35",
"eventDate": "2026-02-23T11:34:58Z",
"links": [
{
"href": "https://api.qa.paysafe.com/alternatepayments/v1/accounts/1026527631/paymenthandles/baff51f4-009d-42a3-b146-218075ae7e35",
"rel": "payment_handle"
}
],
"mode": "live",
"eventName": "PAYMENT_HANDLE_COMPLETED"
}

{
"payload": {
"accountId": "1026527631",
"id": "ee1ba660-e47b-438a-bd18-1048e604e7f9",
"merchantRefNum": "6cc5b4ff-66ea-412e-8f7d-50c14a0a7079",
"paymentHandleToken": "PH3ubKU1HFZmWx1s",
"transactionType": "PAYMENT",
"amount": 100,
"currencyCode": "EUR",
"status": "EXPIRED",
"statusReason": "AUTH_EXPIRED",
"paymentType": "EPAY",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"zip": "123456",
"city": "Toronto",
"country": "CA"
},
"statusTime": "2026-02-23T11:48:37Z",
"updatedTime": "2026-02-23T11:48:37Z",
"gatewayReconciliationId": "75fe8289-612e-49a6-aabc-b9008003fce6",
"customerIp": "172.0.0.1",
"profile": {
"firstName": "kranthi",
"lastName": "kumar",
"email": "test@paysafe.com",
"dateOfBirth": {
"day": 1,
"month": 1,
"year": 1901
},
"phone": "1234567890"
},
"usage": "SINGLE_USE",
"executionMode": "SYNCHRONOUS",
"gatewayResponse": {
"processor": "SKRILL_QCO",
"sid": "215b4d8dde2bfee0cdc2c6b460f8e422"
},
"txnTime": "2026-02-23T11:33:33Z"
},
"eventType": "PAYMENT_HANDLE_EXPIRED",
"attemptNumber": "1",
"resourceId": "ee1ba660-e47b-438a-bd18-1048e604e7f9",
"eventDate": "2026-02-23T11:33:33Z",
"links": [
{
"href": "https://api.qa.paysafe.com/alternatepayments/v1/accounts/1026527631/paymenthandles/ee1ba660-e47b-438a-bd18-1048e604e7f9",
"rel": "payment_handle"
}
],
"mode": "live",
"eventName": "PAYMENT_HANDLE_EXPIRED"
}

{
"payload": {
"accountId": "1026527631",
"id": "47b5b49d-c7de-4af5-bbed-c8229f11b894",
"merchantRefNum": "e01fa95d-11bd-4757-96a2-3c30acb3dac3",
"paymentHandleToken": "PHIvU9KQvPo2BVbb",
"amount": 100,
"currencyCode": "EUR",
"status": "COMPLETED",
"gatewayResponse": {
"transaction_id": "700994c0-2171-4c92-b117-6fd8f051f931",
"amount": "1.0",
"merchant_id": "982842053",
"payerIban": "c0320c31685941d883d546d6a08c97e1",
"processor": "SKRILL_QCO",
"sid": "894ba8ac15a248578b63e4f6b08f20ba",
"mb_transaction_id": "1262997306",
"pay_from_email": "fake@email.com",
"pay_to_email": "elvisstoyanov.qco@sun-fish.com",
"payerName": "kranthi kumar",
"currency": "EUR",
"id": "1262997306",
"status": "2"
},
"paymentType": "EPAY",
"source": "SingleAPI",
"availableToSettle": 0,
"txnTime": "2026-02-23T11:34:58Z",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"zip": "123456",
"city": "Toronto",
"country": "CA"
},
"customerIp": "172.0.0.1",
"profile": {
"firstName": "kranthi",
"lastName": "kumar",
"email": "test@paysafe.com",
"dateOfBirth": {
"day": 1,
"month": 1,
"year": 1901
},
"phone": "1234567890"
},
"settleWithAuth": true,
"statusTime": "2026-02-23T11:37:00Z",
"updatedTime": "2026-02-23T11:37:00Z",
"gatewayReconciliationId": "700994c0-2171-4c92-b117-6fd8f051f931"
},
"eventType": "PAYMENT_COMPLETED",
"attemptNumber": "1",
"resourceId": "47b5b49d-c7de-4af5-bbed-c8229f11b894",
"eventDate": "2026-02-23T11:34:58Z",
"links": [
{
"href": "https://api.qa.paysafe.com/alternatepayments/v1/accounts/1026527631/payments/47b5b49d-c7de-4af5-bbed-c8229f11b894",
"rel": "payment"
}
],
"mode": "live",
"eventName": "PAYMENT_COMPLETED"
}