paysafecard
paysafecard is a popular alternative payment method that enables customers to make online purchases without the need for a bank account or credit card. Customers can purchase prepaid vouchers from authorized retailers and then redeem them at various online platforms, including gaming, e-commerce, and entertainment sites. With its widespread availability and ease of use, paysafecard offers a secure and convenient solution for customers seeking a flexible payment option for their online transactions.
Features
-
Broad acceptance across industries: paysafecard is widely accepted by various online platforms, from gaming to e-commerce and entertainment.
-
Secure and private transactions: With paysafecard, customers can make purchases online without sharing personal or financial information.
-
No bank account or credit card required: paysafecard eliminates the requirement for traditional banking services, making it accessible to all.
-
Flexible payment amounts: Customers can choose the desired denomination for prepaid vouchers, allowing for customized payment options.
-
Convenient accessibility: paysafecard vouchers can be easily obtained from authorized retailers or online channels, ensuring widespread availability.
The Payments API caters to the following needs of paysafecard:
- Payment Instrument: paysafecard , paysafecard account, Scan to Pay.
- Prepaid Payment Method: Pay online without entering any personal information, bank, or credit card details.
- Transaction types: Payments, Withdrawals, and Refunds.
- Payment authentication: PIN protected (Payment Services Directive 2 (PSD2) Compliance)
Product Availability
To see the availability of products, click here.
Typical Scenarios
paysafecard Payment
To process a payment request using paysafecard:
- Create a payment handle with the following parameter settings:
transactionType: PAYMENT
paymentType: PAYSAFECARD
POST: paymenthub/v1/paymenthandles - We return a response with the following details:
- The action parameter is set to REDIRECT
- A payment_redirect link points to paysafecard page redirect URL
- The status of the payment handle becomes INITIATED.
- After the customer is redirected using payment_redirect on the paysafecard page, the customer gets different options to pay depending upon merchant configuration and the currency of transaction:
- Depending upon the status of the transaction, the customer is redirected to the success or failed page.
- The status of the payment handle becomes PAYABLE after a successful transaction and becomes FAILED, if the transaction fails.
- You get notified of the status change through a configured webhook.
- Use the paymentHandleToken returned in the response to process the payment request.
POSTpaymenthub/v1/payments -
In the response of Payments API call, depending upon your configured account at paysafecard and the processing currency and the customer action, the response contains these parameters.
-
The Id returned in the response is the payment ID, and it's the same as the settlement ID if settleWithAuth is set to TRUE, and must be stored at your end for future use, as paymentId is used in refunds directly.
- If the Payment API request is done and settleWithAuth is set to FALSE, the Settlement API can be called separately.
- POST: paymenthub/v1/settlements
- In this case, a new and separate Id from the Payments ID is returned in the response, and this should be stored at the merchant's end for future use, as settlementId is used in refunds directly and not paymentId.
-
Note:
- Customers who have a paysafecardaccount will be eligible for the payout service.
- To prevent the customer from changing the email ID on the paysafecard page, you can enable the email restriction feature while getting onboarded with paysafecard.
- You can pass the email ID of the customer under profile.email parameter of the payment handle.
- The email ID used by customer in the paysafecard page will be returned under gatewayResponse.profile.email.
APIs to use
paysafecard Withdrawal
paysafecard payouts allow the transfer of funds to the paysafecard account holders. Payout is executed by the business partner at the demand of the customer.
Payouts are currently only available for my paysafecard account holders in the following countries:
Austria | Croatia | Denmark | Georgia |
Belgium | Cyprus | Finland | Germany |
Bulgaria | Czech Rep. | France | Greece |
Hungary | Ireland | Italy | Latvia |
Luxemburg | Malta | Netherlands | Norway |
Poland | Portugal | Romania | Slovakia |
Slovenia | Spain | Sweden | Switzerland |
United Kingdom |
Payout Prerequisites
-
For each payout request, the business partner needs to provide the customer’s personal details (first name, last name, email address and date of birth) to paysafecard during the payout call. paysafecard automatically validates the provided data against the registered paysafecard account data. The payout will automatically be refused if the data does not match.
-
If the data does not match 100%; the automatic validation cannot proceed and the payout will be refused automatically. The input will be normalized before the comparison starts by paysafecard.
To process a paysafecard withdrawal request:
- Create a payment handle with the following parameter settings:
transactionType: PAYMENT
paymentType: PAYSAFECARD
POST:paymenthub/v1/paymenthandles -
The request needs two objects
-
paysafecard which will take 2 parameters
-
profile object of the request will take 4 parameters.
-
- In the response, a one-time token will be received with the tag paymentHandleToken and the status turns to PAYABLE, this token is then passed to the Standalone Credits API.
POST: paymenthub/v1/standalonecredits - The final response will contain the details of the transaction with parameters like
- id - unique identifier at Paysafe
- gatewayReconciliationId - unique identifier at Skrill
- Status of the transaction that can be used for future references.
- The status of the withdrawal will be PENDING initially and moves to COMPLETED once the refund is processed to the customer's bank account, at each step a webhook will be triggered to you.
APIs to use
paysafecard Refunds
To process a refund transaction using paysafecard:
You can initiate a refund transaction only for a transaction whose settlement/payment is completed.
- After the payment and then settlement is done
- The status is COMPLETED in the response of payments information
- The refund can be initiated using the Settlement ID which is the same as Payment ID if settleWithAuth is TRUE.
- Create a refund request with the Refunds API.
POST: /paymenthub/v1/settlements/{settlementId }/refunds - The response contains details of the payment and a unique identifier that could be used to refer to each individual refund, either partial or full.
- The status of the refund will be PENDING initially and moves to COMPLETED once the refund is processed to the customer's bank account, at each step a webhook will be triggered to you.
Note: A refund transaction can only be initiated by you and for a transaction whose settlement/payment is completed. Partial refunds are not available.
APIs to use
Get Balance
You can retrieve the balance in your accounts using the Get Balance API. The API call is a GET request and returns an array of account balances.
Note: While onboarding a customer to paysafecard, contact Paysafe Integration Team and get this feature enabled for your account.
Name | Mandatory/Optional | Description |
---|---|---|
paymentType | Mandatory | Payment Type (PAYSAFECARD) |
currencyCode | Mandatory | Filters based on currency, if provided. (3 letter ISO currency code) |
accountId | Optional | Only required if you have multiple accounts and maintain different balances at each level and you want to filter them in response. |
Sample Request:
GET: https://api.test.paysafe.com/paymenthub/v1/balances?paymentType={paymentType}¤cyCode={currencyCode}
Sample Response
[{
"currencyCode": "GBP",
"paymentType": "PAYSAFECARD",
"balance": "895009",
"gatewayResponse": {
"processor": "PAYSAFECARD",
"daily_payout_amount": 0,
"daily_payout_balance": 1000000,
"daily_payout_limit": 1000000,
"total_payment_amount": 13569,
"total_payout_amount": 118560,
"total_payout_balance": 895009
}
}]
Parameters
Payments API response parameters
Parameter | Mandatory | Description |
---|---|---|
gatewayResponse.id | M - Returned for all transactions | Unique Identifier of the Payment at paysafecard which could be used for reconciliation (common for all APMs) |
gatewayResponse.profile | C - returned only in specific cases and mandatory for Payouts | Profile details of the user |
gatewayResponse.profile.dateOfBirth.day | C - returned only in specific cases and mandatory for Payouts | Day of Date of Birth of the paysafecard account holder at paysafecard end |
gatewayResponse.profile.dateOfBirth.Month | C - returned only in specific cases and mandatory for Payouts | Month of Date of Birth of the paysafecard account holder at Paysafecard end |
gatewayResponse.profile.dateOfBirth.Year | C - returned only in specific cases and mandatory for Payouts | Year of Date of Birth of the paysafecard account holder at Paysafecard end |
gatewayResponse.profile.firstName | C - returned only in specific cases and mandatory for Payouts | First Name of the paysafecard account holder at Paysafecard end |
gatewayResponse.profile.lastName | C - returned only in specific cases and mandatory for Payouts | Last Name of the paysafecard account holder at Paysafecard end |
gatewayResponse.pscId | C - returned only in specific cases and mandatory for Payouts | Unique user identifier sent back from paysafecard |
paysafecard.consumerId
| M - Returned for all transactions | Unique Merchant-User-processor identifier provided by Merchant in request. |
paysafecard object
Parameter | Mandatory | Description |
---|---|---|
consumerId | M - Needed for all transactions | Unique email ID of the user which is used to identify to account at Skrill end |
pscId | C - This is mandatory if email in profile is not provided | Unique user identifier provided by paysafecard in Payments call |
profile object
Parameter | Mandatory | Description |
---|---|---|
firstName | M - Needed for all transactions | Unique email ID of the user which is used to identify to account at Skrill end |
lastName | M - Needed for all transactions | Two-digit unique country code to identify the area of operation of bank account and currency. |
C - This is mandatory if pscId in paysafecard object is not provided | email Id of the user registered at paysafecard end | |
dateOfBirth.day | M - Needed for all transactions | Day of Date of Birth of the paysafecard account holder at Paysafecard end |
dateOfBirth.Month | M - Needed for all transactions | Month of Date of Birth of the paysafecard account holder at Paysafecard end. |
dateOfBirth.Year | M - Needed for all transactions | Year of Date of Birth of the paysafecard account holder at Paysafecard end |
Payment handle API request
{
"merchantRefNum": "6005618c-afe8-41c2-a65f-50138790d7b4",
"transactionType": "PAYMENT",
"accountId": "1001737020",
"paysafecard": {
"consumerId": "merchantclientid",
"minAgeRestriction": 18,
"kycLevelRestriction": "SIMPLE"
},
"paymentType": "PAYSAFECARD",
"amount": 500,
"currencyCode": "WUR",
"customerIp": "172.0.0.1",
"billingDetails": {
"nickName": "Home",
"street": "100 Queen",
"street2": "Unit 201",
"city": "Toronto",
"zip": "M5H 2N2",
"country": "UK"
},
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore",
"phone": "12345678"
},
"returnLinks": [{
"rel": "on_completed",
"href": "https://usgaminggamblig.com/payment/return/success",
"method": "GET"
}, {
"rel": "on_failed",
"href": "https://usgaminggamblig.com/payment/return/failed",
"method": "GET"
}, {
"rel": "default",
"href": "https://usgaminggamblig.com/payment/",
"method": "GET"
}
]
}
Payment handle API response
{
"id": "e8c217c0-f212-4007-b4ac-fd0642a75d3f",
"paymentType": "PAYSAFECARD",
"paymentHandleToken": "PHlO4bOFGsNX5X1N",
"merchantRefNum": "df9b287b-a0df-4996-87b0-3089e4b1363f",
"currencyCode": "EUR",
"txnTime": "2023-03-17T10:47:08Z",
"billingDetails": {
"street": "100 Queen",
"street2": "Unit 201",
"city": "Toronto",
"zip": "M5H 2N2",
"country": "UK"
},
"customerIp": "172.0.0.1",
"status": "INITIATED",
"links": [
{
"rel": "redirect_payment",
"href": "https://api.test.paysafe.com/alternatepayments/v1/redirect?accountId=1001737020&paymentHandleId=e8c217c0-f212-4007-b4ac-fd0642a75d3f&token=eyJhbGciOiJIUzI1Ni"
}
],
"liveMode": false,
"usage": "SINGLE_USE",
"action": "REDIRECT",
"executionMode": "SYNCHRONOUS",
"amount": 1,
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore",
"phone": "12345678"
},
"timeToLiveSeconds": 599,
"gatewayResponse": {
"processor": "PAYSAFECARD",
"id": "pay_1020009410_9QDoaAb53xJYymobWDtatr0n3KUphzAD_EUR"
},
"returnLinks": [
{
"rel": "on_completed",
"href": "https://usgaminggamblig.com/payment/return/success"
},
{
"rel": "on_failed",
"href": "https://usgaminggamblig.com/payment/return/failed"
},
{
"rel": "default",
"href": "https://usgaminggamblig.com/payment/"
}
],
"transactionType": "PAYMENT",
"gatewayReconciliationId": "pay_1020009410_9QDoaAb53xJYymobWDtatr0n3KUphzAD_EUR",
"updatedTime": "2023-03-17T10:47:08Z",
"statusTime": "2023-03-17T10:47:08Z",
"paysafecard": {
"consumerId": "merchantclientid"
}
}
Payments API request
{
"merchantRefNum": "5bb81950-bed0-4e4a-8cce-8af39a6192c7",
"amount": 1000,
"currencyCode": "EUR",
"dupCheck": true,
"settleWithAuth": true,
"paymentHandleToken": "PHtxnH0z99GXgc0Z",
"customerIp": "172.0.0.1",
"description": "Test Paysafe"
}
Payments API response
{
"id": "3946cb51-9a7d-406e-b546-17c97d94ee2d",
"paymentType": "PAYSAFECARD",
"paymentHandleToken": "PHlO4bOFGsNX5X1N",
"merchantRefNum": "123eb3cd-847b-4c2b-9d8c-7786c5dea18e",
"currencyCode": "EUR",
"settleWithAuth": false,
"dupCheck": true,
"txnTime": "2023-03-17T10:47:08Z",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"city": "Toronto",
"zip": "M5H 2N2",
"country": "UK"
},
"customerIp": "172.0.0.1",
"status": "COMPLETED",
"gatewayReconciliationId": "pay_1020009410_9QDoaAb53xJYymobWDtatr0n3KUphzAD_EUR",
"amount": 1,
"availableToRefund": 0,
"consumerIp": "172.0.0.1",
"liveMode": false,
"simulator": "EXTERNAL",
"updatedTime": "2023-03-17T10:47:39Z",
"statusTime": "2023-03-17T10:47:39Z",
"gatewayResponse": {
"id": "pay_1020009410_9QDoaAb53xJYymobWDtatr0n3KUphzAD_EUR",
"pscId": 184746891465,
"processor": "PAYSAFECARD",
"profile": {
"firstName": "Test",
"lastName": "SquvmeUPmFYBvAvokItGtfaamD",
"dateOfBirth": {
"day": 15,
"month": 9,
"year": 1992
}
}
},
"availableToSettle": 1,
"paysafecard": {
"consumerId": "merchantclientid"
}
}
Standalone credit - payment handle API request
{
"merchantRefNum": "0599b8fc32e757e356cc",
"paysafecard": {
"consumerId": "merchantclientid",
"pscId":"184746891465"
},
"transactionType": "STANDALONE_CREDIT",
"shopperUrl": "https://google.com/",
"profile": {
"firstName": "Test",
"lastName": "SquvmeUPmFYBvAvokItGtfaamD",
"dateOfBirth": {
"day": 15,
"month": 9,
"year": 1992
}},
"paymentType": "PAYSAFECARD",
"amount": 500,
"currencyCode": "USD",
"customerIp": "172.0.0.1",
"billingDetails": {
"nickName": "Home",
"street": "100 Queen",
"street2": "Unit 201",
"city": "Toronto",
"zip": "M5H 2N2",
"country": "CA"
},
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore",
"phone": "12345678"
},
"returnLinks": [
{
"rel": "on_completed",
"href": "https://usgaminggamblig.com/payment/return/success",
"method": "GET"
},
{
"rel": "on_failed",
"href": "https://usgaminggamblig.com/payment/return/failed",
"method": "GET"
},
{
"rel": "default",
"href": "https://usgaminggamblig.com/payment/",
"method": "GET"
}
]
}
Standalone credit - payment handle API response
{
"id": "3202df97-24ba-4a39-badb-cec34a73378c",
"paymentType": "PAYSAFECARD",
"paymentHandleToken": "PHoQM3F6IZr6Q9u5",
"merchantRefNum": "28a6dfea3263458a1c3e",
"currencyCode": "USD",
"txnTime": "2022-09-15T11:17:19Z",
"billingDetails": {
"street": "100 Queen",
"street2": "Unit 201",
"city": "Toronto",
"zip": "M5H 2N2",
"country": "CA"
},
"customerIp": "172.0.0.1",
"status": "PAYABLE",
"liveMode": false,
"usage": "SINGLE_USE",
"action": "NONE",
"executionMode": "SYNCHRONOUS",
"amount": 500,
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore",
"phone": "12345678"
},
"timeToLiveSeconds": 599,
"gatewayResponse": {
"processor": "PAYSAFECARD",
"id": "out_6235070452_ayuUQc6xXnocrat7oTO7VTLrHtUPAEWv_USD",
"status": "VALIDATION_SUCCESSFUL"
},
"returnLinks": [
{
"rel": "default",
"href": "https://usgaminggamblig.com/payment/"
},
{
"rel": "on_failed",
"href": "https://usgaminggamblig.com/payment/return/failed"
},
{
"rel": "on_completed",
"href": "https://usgaminggamblig.com/payment/return/success"
}
],
"transactionType": "STANDALONE_CREDIT",
"gatewayReconciliationId": "out_6235070452_ayuUQc6xXnocrat7oTO7VTLrHtUPAEWv_USD",
"updatedTime": "2022-09-15T11:17:19Z",
"statusTime": "2022-09-15T11:17:19Z",
"profile": {
"firstName": "Test",
"lastName": "SquvmeUPmFYBvAvokItGtfaamD",
"email": "JHxDfTbXua@LAKdfisezY.svz",
"dateOfBirth": {
"day": 15,
"month": 9,
"year": 1992
}
},
"paysafecard": {
"consumerId": "merchantclientid"
}
}
Standalone credit - API request
{
"merchantRefNum": "e10abc4d4be42ba19cf0",
"amount": "3000",
"currencyCode": "EUR",
"dupCheck": true,
"settleWithAuth": true,
"paymentHandleToken": "PH9pFHcgzpdqZLQB",
"customerIp": "172.0.0.1",
"description": "Magazine subscription"
}
Standalone credit - API response
{
"id": "e5b39cb0-538c-44bf-918e-cf067de9adc0",
"paymentType": "PAYSAFECARD",
"paymentHandleToken": "PHoQM3F6IZr6Q9u5",
"merchantRefNum": "3291035a-93db-4243-a459-74da030d4fe0",
"currencyCode": "USD",
"dupCheck": true,
"txnTime": "2022-09-15T11:17:58Z",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"city": "Toronto",
"zip": "M5H 2N2",
"country": "CA"
},
"customerIp": "204.91.0.12",
"status": "COMPLETED",
"gatewayReconciliationId": "out_6235070452_ayuUQc6xXnocrat7oTO7VTLrHtUPAEWv_USD",
"amount": 500,
"returnLinks": [
{
"rel": "default",
"href": "https://usgaminggamblig.com/payment/"
},
{
"rel": "on_failed",
"href": "https://usgaminggamblig.com/payment/return/failed"
},
{
"rel": "on_completed",
"href": "https://usgaminggamblig.com/payment/return/success"
}
],
"liveMode": false,
"updatedTime": "2022-09-15T11:17:59Z",
"statusTime": "2022-09-15T11:17:59Z",
"gatewayResponse": {
"processor": "PAYSAFECARD",
"id": "out_6235070452_ayuUQc6xXnocrat7oTO7VTLrHtUPAEWv_USD",
"status": "SUCCESS"
},
"profile": {
"firstName": "Test",
"lastName": "SquvmeUPmFYBvAvokItGtfaamD",
"email": "JHxDfTbXua@LAKdfisezY.svz",
"dateOfBirth": {
"day": 15,
"month": 9,
"year": 1992
}
},
"paysafecard": {
"consumerId": "merchantclientid"
}
}
Refunds API - request
POST:paymenthub/v1/settlements/{settlementId}/refunds
{
"merchantRefNum": "db1c255c-3081-4e04-8838-fe1ab2545445",
"amount": 2500,
"dupCheck": true
}
Refunds API - response
{
"id": "a07cc34d-49d0-4cc9-a8cc-9a92b1d564a9",
"paymentType": "PAYSAFECARD",
"merchantRefNum": "cfbb5d43-e26b-4e80-9245-5206a348c586",
"currencyCode": "USD",
"txnTime": "2023-06-27T13:19:34Z",
"status": "COMPLETED",
"gatewayReconciliationId": "bc363f96-c75d-46c0-a5a9-95a5c6415fc6",
"amount": 100,
"updatedTime": "2023-06-27T13:19:35Z",
"statusTime": "2023-06-27T13:19:35Z",
"liveMode": false,
"gatewayResponse": {
"id": "bc363f96-c75d-46c0-a5a9-95a5c6415fc6",
"processor": "PAYSAFECARD"
},
"source": "SingleAPI"
}
Testing Instructions
Test Customer Id Values
Customer ID is also known as Merchant Client ID, is an important parameter for the integration of paysafecard. The Customer ID identifies the Customer on our business partners side. The most optimal customer ID is a completely random value. A value that uniquely identifies the customer and is disconnected from any personal information. This customer ID value should be the same for all transactions of the customer. Here are Guidelines for possible Customer IDs:
Valid Values:
Value | Type |
---|---|
2c3be0b50c7a5f1964a63d78f38a6ffc41c027e9 | SHA1 - test@123.com |
742f2b1a55cd5d606ea44b4fcb54646a | MD5 - test@123.com |
3a5b0d0777dead9df93d502df85c8180e53804eb | SHA1 - UsernameValue1 |
3192481752123 | Random Customer Identifier |
CustomerID1 | Customer Identifier free of personal information |
Invalid Values
test@123.com |
Username_1 |
FirstName123 |
LastName123 |
Timestamp |
IP Address |
Sending any form of the invalid values will not be accepted. If you intend to process paysafecard transactions on multiple brands, please inquire about the possibilities of separating multiple entities for your account.
Webhooks
Payment Handle
- PAYMENT_HANDLE_PAYABLE – This webhook signifies that the payment handle token created for the required purpose can now be executed, and the preliminary requirements are completed, the next API call with the payment handle can be done.
- PAYMENT_HANDLE_PROCESSING – This webhook is triggered when the user is successfully redirected to the payment platform page and operation has started for the payment by the user.
- PAYMENT_HANDLE_COMPLETED – This webhook is triggered when the process of the payment handle is token is completed after triggering the next API, Payments or Standalone Credit API.
- PAYMENT_HANDLE_EXPIRED – This webhook is triggered when the next step is not initiated after the payment handle is created within the given time frame, the duration can be seen in the response to /paymenthub/v1/paymenthandles API under the tag timeToLiveSeconds.
Payments
- PAYMENT_PROCESSING: The payment is in progress. In some cases, there might be delays due to an action pending by you or the customer.
- PAYMENT_PENDING - The payment is pending because the transaction hasn't been completed from the bank account to Skrill wallet to you.
- PAYMENT_COMPLETED/SETTLEMENT_COMPLETED – The payment was completed successfully.
- PAYMENT_FAILED – This webhook is triggered when the payment fails during the process.
Settlement
- SETTLEMENT_FAILED - This webhook is triggered in case the transaction was initially completed and later failed due to some settlement error.
- SETTLEMENT_CANCELLED - This webhook is triggered when the transaction was cancelled after it was completed
- SETTLEMENT_ERRORED - This webhook is used when there is a technical error during the initiation of a transaction.
- SETTLEMENT_PENDING - This webhook is triggered when the withdrawal has been initiated but due to various bank delay reasons or time zone issues the actual money transfer has not happened.
Standalone Credits/Withdrawal
- SA_CREDIT_FAILED - This webhook is triggered in case the transaction was initially completed and later failed due to some settlement error.
- SA_CREDIT_CANCELLED - This webhook is triggered when the transaction was cancelled after it was completed
- SA_CREDIT_ERRORED - This webhook is used when there is a technical error during the initiation of a transaction.
- SA_CREDIT_PENDING - This webhook is triggered when the withdrawal has been initiated but due to various bank delay reasons or time zone issues the actual money transfer has not happened.
Refunds
- REFUND_FAILED - This webhook is triggered when the refund is initiated but failed due to a functional error for refund amount is more than the payment amount.
- REFUND_COMPLETED - This webhook is triggered when the refund has been successfully transferred from merchant account to the user's chosen bank account
- REFUND_PENDING - This webhook is triggered when refund has been initiated but due to various bank delay reasons or time zone issues the actual money transfer has not happened.