Paysafe
Paysafe payment gateway integration supporting credit card processing, authorization, capture, refunds, voids, 3D Secure, MOTO transactions, and secure payment tokenization via the Paysafe Payments API.
Supported Functionality
| Feature | Supported |
|---|---|
| Authorization | ✅ |
| Capture | ✅ |
| Refund | ✅ |
| Card Tokenization | ✅ |
| 3D Secure | ✅ |
| MOTO | ✅ |
| $0 Transactions | ❌ |
Adding a Paysafe Merchant
To connect a Merchant using the Paysafe Gateway,
- First add Merchant
- Select Paysafe as the Gateway
- Add Gateway Details as outlined below
| Gateway Details | Description |
|---|---|
| Username* | Paysafe API username |
| Password* | Paysafe API password |
| Account Number* | Paysafe account ID — provided by Paysafe |
| Sandbox | Check this box if these are sandbox credentials. When checked, requests are sent to api.test.paysafe.com. When unchecked, requests are sent to api.paysafe.com. |
| Pass MOTO Payment Type | Check this box if you would like to pass initial transactions as MOTO (Mail Order/Telephone Order). When unchecked, 3DS authentication data is required. |
| Attempt 3D Secure | Check this box to attempt Paysafe-managed 3D Secure authentication on initial transactions. When the checkout supports redirects, Paysafe will handle the 3DS challenge flow. |
| Bypass $0 Transaction Authorizations | Paysafe will decline $0.00 transactions. When unchecked, a $1 authorization (voided immediately) will be used to validate the card — the result of this authorization will determine if the transaction is successful. Check this box to bypass the gateway entirely for $0 transactions. This setting only applies to initial transactions — $0 renewals will always bypass the gateway. Learn more about $0.00 transaction handling. |
| Pass Merchant Descriptor | When checked, the merchant descriptor set up within the Merchant Account will be passed to Paysafe as a dynamic descriptor with the transaction. |
| Merchant Payment Methods* | The types of payment methods this merchant accepts - Credit card, check, ach, etc. |
| Merchant Card Types* | Card types to be accepted on this Merchant |
| Merchant Default Currency* | Default currency that will be used, if currency is not specified |
| Merchant Currencies* | All currencies accepted on this merchant |
*Required
MOTO (Mail Order/Telephone Order)
When Pass MOTO Payment Type is checked, Vrio will pass entryMode: MOTO on the payment handle request for initial transactions that do not have 3DS authentication data. This tells Paysafe the transaction is a mail order or telephone order and does not require 3D Secure authentication.
If 3DS authentication data is present on the order, it will take priority over the MOTO setting and the 3DS values will be passed instead.
ImportantIf you are using a third-party 3DS provider (e.g., Paay.co), do not check "Pass MOTO Payment Type" — the 3DS data from your provider will be passed automatically. Learn more about third-party 3DS integrations here.
Attempt 3D Secure
When Attempt 3D Secure is checked, Vrio will use Paysafe-managed 3D Secure authentication for initial transactions where the checkout supports redirects (i.e., a redirect_url is present).
How it works:
- Vrio creates a payment handle with a
threeDsobject andreturnLinkspointing back to the checkout. - If Paysafe determines a 3DS challenge is required, the payment handle returns with
status: INITIATEDandaction: REDIRECT. Vrio returns aresponse_code: 101with the redirect URL — the customer is redirected to complete 3DS authentication. - If the transaction is frictionless (no challenge needed), the payment handle returns as
PAYABLEimmediately and Vrio processes the payment in a single step — no redirect is needed. - After the customer completes 3DS authentication and is redirected back, the checkout calls the
/order/{order_id}/completeendpoint. Vrio verifies the payment handle is nowPAYABLEand processes the payment.
For handling the 101 response code, see Handling 101 Response Codes.
PriorityWhen both Attempt 3D Secure and Pass MOTO Payment Type are checked, 3D Secure takes priority for transactions where a redirect URL is present. For transactions without a redirect URL (e.g., API-initiated or recurring charges), the MOTO setting will be used as a fallback.
Paysafe Account RequirementPaysafe-managed 3D Secure must be enabled on your Paysafe account. Contact Paysafe to enable this feature before checking this box. If it is not enabled, payment handle creation will fail with an authentication error.
Refunds
Paysafe does not support partial refunds on settlements that have not yet been batched. If a refund is attempted on an unbatched settlement and the refund amount equals the full settlement amount, Vrio will automatically attempt a settlement cancel instead. This is transparent to the user — the refund will appear successful.
If the refund amount is less than the full settlement amount and the settlement has not been batched, the refund will fail. In this case, wait for the settlement to batch before attempting the partial refund.
Request
Required Data Mapping
Below is a table that shows how Vrio maps its data to the Paysafe Payments API. Values in bold are hard coded values, the rest are dynamic based on the payment.
Payment Handle (New Card)
For new card transactions, Vrio first creates a payment handle to tokenize the card data before processing the payment.
| Paysafe Payments API | VRIO |
|---|---|
| accountId | Account Number (from Gateway Details) |
| merchantRefNum | **VRIO-**transactions.transaction_id |
| transactionType | PAYMENT |
| paymentType | CARD |
| amount | transactions.transaction_total (minor units) |
| currencyCode | transactions.currency_value |
| card.cardNum | customers_card.card_number |
| card.cardExpiry.month | customers_card.card_exp_month |
| card.cardExpiry.year | customers_card.card_exp_year |
| card.cvv | customers_card.card_cvv |
| card.holderName | billing_fname + billing_lname |
| billingDetails.street | customers_address.billing_address1 |
| billingDetails.street2 | customers_address.billing_address2 |
| billingDetails.city | customers_address.billing_city |
| billingDetails.state | customers_address.billing_state |
| billingDetails.country | customers_address.billing_country |
| billingDetails.zip | customers_address.billing_zipcode |
Auth / Sale
| Paysafe Payments API | VRIO |
|---|---|
| accountId | Account Number (from Gateway Details) |
| amount | transactions.transaction_total (minor units) |
| currencyCode | transactions.currency_value |
| merchantRefNum | **VRIO-**transactions.transaction_id |
| paymentHandleToken | Token from payment handle (new) or stored multi-use token (recurring) |
| settleWithAuth | true for Sale, false for Auth |
| billingDetails.street | customers_address.billing_address1 |
| billingDetails.city | customers_address.billing_city |
| billingDetails.state | customers_address.billing_state |
| billingDetails.country | customers_address.billing_country |
| billingDetails.zip | customers_address.billing_zipcode |
| profile.firstName | customers_address.billing_fname |
| profile.lastName | customers_address.billing_lname |
| profile.email | customers.email |
| customerIp | orders.ipaddress |
Optional Data Mapping
3DS Variables (Third-Party Provider)
3DS values are passed on the payment handle request (not the payment request). They are only passed when 3DS authentication data exists on the order for the current cycle. This is used when you have a third-party 3DS provider (e.g., Paay.co or Payon) — not when using the Attempt 3D Secure checkbox.
| Paysafe Payments API | VRIO |
|---|---|
| authentication.threeDResult | orders_3ds.cardholder_auth |
| authentication.eci | orders_3ds.eci |
| authentication.cavv | orders_3ds.cavv |
| authentication.xid | orders_3ds.xid |
| authentication.threeDSecureVersion | orders_3ds.three_ds_version |
| authentication.directoryServerTransactionId | orders_3ds.directory_server_id |
Pay AttentionIf using a third-party 3DS provider (e.g., Paay.co or Payon), do not check "Pass MOTO Payment Type" or "Attempt 3D Secure" on the merchant. The 3DS data from your provider will be passed automatically. Learn more about third-party 3DS integrations here.
3DS Variables (Paysafe-Managed)
When Attempt 3D Secure is checked and a redirect URL is present, the following data is passed on the payment handle request:
| Paysafe Payments API | Value |
|---|---|
| threeDs.merchantUrl | https://www.example.com |
| threeDs.deviceChannel | BROWSER |
| threeDs.messageCategory | PAYMENT |
| threeDs.transactionIntent | GOODS_OR_SERVICE_PURCHASE |
| threeDs.authenticationPurpose | PAYMENT_TRANSACTION |
| returnLinks[rel=default] | Checkout redirect URL |
| returnLinks[rel=on_completed] | Checkout redirect URL |
| returnLinks[rel=on_failed] | Checkout redirect URL |
Stored Credentials (Recurring)
Vrio automatically passes stored credential data with every transaction to Paysafe.
| Paysafe Payments API | VRIO |
|---|---|
| storedCredential.type | ADHOC if an initial charge (cycle 1) RECURRING if a renewal charge (cycle 2+) |
| storedCredential.occurrence | INITIAL if an initial charge (cycle 1) SUBSEQUENT if a renewal charge (cycle 2+) |
| storedCredential.initialTransactionId | The initial Gateway Response ID (gateway_response_id) for the card/merchant/order — only passed on cycle 2+ |
Pass Merchant Descriptor
If Pass Merchant Descriptor is checked:
| Paysafe Payments API | Vrio |
|---|---|
| merchantDescriptor.dynamicDescriptor | The Merchant Descriptor (merchant_descriptor) from the Merchant Account setup |
Card Tokenization
For new card transactions, after a successful payment, Vrio will automatically create a customer profile and store the card as a multi-use payment handle token for future transactions.
| Paysafe Payments API | VRIO |
|---|---|
| merchantCustomerId | **VRIO-**customers.customer_id |
| firstName | customers_address.billing_fname |
| lastName | customers_address.billing_lname |
| customers.email | |
| phone | customers_address.billing_telephone |
| paymentHandleTokenFrom | Single-use token from payment handle |
The resulting multi-use payment handle token is stored in the format: {paysafe_customer_id}|{multi_use_token}
For recurring charges, the stored multi-use token is used directly — no payment handle creation is needed, reducing the transaction to a single API call.
Response Data Mapping
Below is a table that shows how Vrio maps data from the Paysafe API response.
| Paysafe Payments API | VRIO |
|---|---|
| 100 (success) / 200 (decline) / 101 (3DS redirect) | response_code |
| id | gateway_response_id |
| error.code / gatewayResponse.responseCode | gateway_response_code |
| gatewayResponse.authCode | gateway_auth_code |
| gatewayResponse.cvvVerification | gateway_response_cvv |
| gatewayResponse.avsResponse | gateway_response_avs |
| gatewayResponse.responseCodeDescription | processor_response_text |
| customer_id|multi_use_token | customer_card_merchant_token |
When a 101 response code is returned, the post_data field will contain the Paysafe 3DS redirect URL. The gateway_response_id will contain the payment handle ID, which is used to verify the handle status after the customer completes 3DS authentication.
Testing
Note : Placing test orders with a Paysafe sandbox account or using Paysafe test cards will not automatically set the order as a test in Vrio. Be sure to flag the order as a test using the is_test flag after the order is processed. For more details on placing test orders, click here.
For Paysafe test cards, check here.
FAQ
Q: I am getting a response_code=101 returned, what does that mean?
A: A response_code=101 indicates that 3D Secure authentication is required before the charge can be completed. The customer must be redirected to the URL in the post_data field to complete 3DS authentication. After authentication, use the /order/{order_id}/complete endpoint to finalize the transaction. Learn more here.
Q: My refund is failing on a recent transaction, what should I do?
A: Paysafe does not support partial refunds on settlements that have not yet been batched. Vrio will automatically attempt a settlement cancel for full refunds on unbatched settlements, but partial refunds will fail. Wait for the settlement to batch (typically the next business day) before attempting a partial refund.
Q: I have both "Pass MOTO Payment Type" and "Attempt 3D Secure" checked — which one takes priority?
A: When both are checked, 3D Secure takes priority for transactions where a redirect URL is present (e.g., checkout page transactions). For transactions without a redirect URL (e.g., API-initiated charges or recurring renewals), the MOTO setting will be used as a fallback.
Updated about 4 hours ago
