Revolut Pay
Revolut Pay is a payment method offered by Revolut that allows customers to make fast, secure, and convenient payments directly from their Revolut personal accounts. With a 50 million global user base and counting, Revolut’s Revolut Pay offers a "one-tap" checkout experience for its account holders, reducing the number of steps and friction for your customers. This quick and frictionless process can significantly decrease cart abandonment rates, leading to more completed sales.
You can use Revolut Pay as a Digital Wallet for:
| REST API | WebSDK | Hosted Payment Page | |
|---|---|---|---|
| Payments | ✅ Available | ⛔️ Unavailable | ⛔️ Unavailable |
| Payouts | ✅ Available | ⛔️ Unavailable | ⛔️ Unavailable |
| Refunds | ✅ Available | ⛔️ Unavailable | ⛔️ Unavailable |
BR-DGE payments that use Revolut Pay as a payment instrument will use the BR-DGE redirect payment flow. When making a Revolut Pay payment via BR-DGE you will typically get a redirect URL in the API response that you redirect your customer to for them to authenticate, and complete the payment.
Transaction Status Flow
Payment
| BR-DGE Status | Description |
|---|---|
AUTHORIZATION_PENDING | When the Revolut Pay payment results in a redirect, the BR-DGE status is AUTHORIZATION_PENDING. |
CAPTURE_PENDING | When the Customer has successfully authenticated themselves with Revolut, and confirmed the payment, Revolut will inform BR-DGE of the transaction result and we will update the status to CAPTURE_PENDING. |
CAPTURED | Revolut will inform BR-DGE when the payment has been captured. When the payment is frictionless, the BR-DGE status goes straight to CAPTURED. |
AUTHORIZATION_DECLINED | Should a payment fail after the customer has authenticated and confirmed the payment, Revolut will inform BR-DGE who will set the status to AUTHORIZATION_DECLINED. |
Revolut Pay Payment Status Mapping
BR-DGE will map the state of the Revolut Pay order to our own BR-DGE statuses. For a more detailed overview of BR-DGE statuses, check out our dedicated Transaction Statuses guide.
| Revolut Status | BR-DGE Status |
|---|---|
| pending | AUTHORIZATION_PENDING |
| processing | CAPTURE_PENDING |
| authorised | AUTHORIZED |
| completed | CAPTURED |
| cancelled | AUTHORIZATION_DECLINED |
| failed | REJECTED |
| failed - the order has expired | EXPIRED |
Payout
The BR-DGE payInReference Payment Instrument can be used to perform Payouts to a Revolut account.
BR-DGE uses the details of a successful Revolut Pay PaymentId to execute a Revolut Pay account transfer from your Revolut account to the customer’s Revolut account.
| BR-DGE Status | Description |
|---|---|
PENDING | If the payout request is successful, Revolut will provide a pending response to BR-DGE and confirm whether it was a success in due course |
APPROVED | When the payout is completed, Revolut will notify BR-DGE, who will update the payout status to APPROVED. |
DECLINED | If the payout fails, or is declined by Revolut, BR-DGE will update the payout status to DECLINED. |
Revolut Pay Payout Status Mapping
BR-DGE will map the state of the Revolut Pay payout to our own BR-DGE statuses. For a more detailed overview of BR-DGE statuses, check out our dedicated Transaction Statuses guide.
| Revolut Status | BR-DGE Status |
|---|---|
| created | PENDING |
| pending | PENDING |
| completed | APPROVED |
| declined | DECLINED |
| failed | DECLINED |
| reverted | DECLINED |
Void
After successfully authenticating a payment, but prior to the payment being captured, you can choose to void the payment. Voiding a payment will cancel the transaction making it no longer possible to capture.
To void a Revolut Pay payment via BR-DGE you should call our Void Payments REST API endpoint with the BR-DGE Payment ID that you want to void POST /v1/payments/{paymentId}/void. If your void request is accepted by the BR-DGE gateway you should expect the void to enter one of the following two BR-DGE statuses, indicating the current state of the void request.
| Revolut Status | BR-DGE Status |
|---|---|
| pending | VOID_PENDING |
| cancelled | VOIDED |
Revolut Pay payments cannot be voided if they have already been captured.
Creating a Revolut Pay transaction
Revolut Pay First Time Payment (in-app)
To create a Revolut Pay "First Time" payment you should send a request similar to the following to the BR-DGE POST /v1/payments REST API endpoint.
{
"merchantTransactionId": "{{$guid}}",
"amount": 1000,
"customerOrderCode": "{{$guid}}",
"orderDescription": "Taxi fare",
"channel": "ios",
"currencyCode": "GBP",
"paymentInstrument": {
"type": "revolutPay",
"appReturnUrl": "https://example.com/return/12345-dsfa-234324-f344",
"revolutCustomerEmail": "[email protected]",
"revolutCustomerFullName": "John Smith",
"revolutPhoneNumber": "07123456789"
}
}You should expect to receive a response similar to the below:
{
"code": "2101",
"message": "Pending",
"id": "6908ab4f62caadeacc8e4a98a40135pk",
"paymentId": "4b0841ca-9891-4c1f-92bf-2dc5db66fbca",
"amount": 1000,
"currencyCode": "GBP",
"actionRequired": true,
"action": {
"type": "REDIRECT",
"paymentId": "4b0841ca-9891-4c1f-92bf-2dc5db66fbca",
"data": {
"REVOLUT_customerId": "8cfab45f5-153d-4787-b5ff-d2c756bc512a",
"providerTransactionId": "6908a3df-af41-a252-1724-9d63774fe164",
"REVOLUT_customerName": "John Smith",
"REVOLUT_customerPhoneNumber": "+447123456789",
"url": "https://revolut.com/redirectUrl",
"REVOLUT_customerEmail": "[email protected]"
}
},
"psp": {
"name": "Revolut",
"transactionId": "6908a3df-af41-a252-1724-9d63774fe164"
},
"pspId": "REVOLUT",
"customerOrderCode": "fde96b4r-1a1s-4327-a769-0f3362337yg5",
"merchantTransactionId": "{{$guid}}"
}Additional Information
Type | Notes |
|---|---|
Payments | Subscribe to BR-DGE notifications to be notified when authorisation has been completed, and the transaction has been captured. Otherwise use the BR-DGE |
Payments | Revolut Pay has 2 different types of redirect, one for app2app redirection, and one for web redirection. Use the BR-DGE If you are using an app2app flow, you must provide an |
Payments | After a payment is authorised, you can retrieve the Revolut Pay account fingerprint ID using the This allows you to check the Revolut account used hasn’t been used by another customer account before capturing the payment |
Revolut Pay "one-tap" Payment
Revolut Pay supports "one-tap" payments, a method of payment which allows returning customers to pay using their Revolut in a single interaction. The presence of apaymentInstrument.revolutCustomerId will make BR-DGE attempt a frictionless "one-tap" payment.
This field should contain Revolut's identifier for the customer. Which can be obtained upon successful completion of a "First Time" payment. This field should not be populated with your own identifier for the customer.
Revolut Pay "one-tap" payments can still be challenged so you should be prepared to handle a redirection flow in the event Revolut require the customer to authenticate
To create a Revolut Pay "one-tap" payment you should send a request similar to the following to the BR-DGE POST /v1/payments REST API endpoint.
{
"merchantTransactionId": "{{$guid}}",
"amount": 100,
"currencyCode": "GBP",
"customerOrderCode": "{{$guid}}",
"orderDescription": "Taxi fare",
"browserData": {
"acceptHeader": "application/json",
"colorDepth": "32",
"javaEnabled": true,
"language": "EN_en",
"screenHeight": 768,
"screenWidth": 1024,
"timeZone": 0,
"userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
},
"paymentInstrument": {
"type": "revolutPay",
"appReturnUrl": "https://example.com/return/12345-dsfa-234324-f344",
"revolutCustomerId": "8cfab45f5-153d-4787-b5ff-d2c756bc512a"
}
}You should expect to receive a response similar to one of the following, depending on if the transaction is approved in a frictionless manner, or not.
{
"code": "1000",
"message": "Approved",
"id": "6908aeccc7aeb2307bff149e3146dbfb",
"paymentId": "e729eaca-6c51-49b9-aaa3-312d657496c8",
"amount": 100,
"currencyCode": "GBP",
"actionRequired": false,
"psp": {
"name": "Revolut",
"transactionId": "6908aecc-567a-a739-840d-7b75fb7db3f9"
},
"pspId": "REVOLUT",
"customerOrderCode": "8cfab45f5-153d-4787-b5ff-d2c756bc512a"
}{
"code": "2101",
"message": "Pending",
"id": "6908ab4f62caadeacc8e4a98a40135pk",
"paymentId": "4b0841ca-9891-4c1f-92bf-2dc5db66fbca",
"amount": 100,
"currencyCode": "GBP",
"actionRequired": true,
"action": {
"type": "REDIRECT",
"paymentId": "4b0841ca-9891-4c1f-92bf-2dc5db66fbca",
"data": {
"REVOLUT_customerId": "8cfab45f5-153d-4787-b5ff-d2c756bc512a",
"providerTransactionId": "6908a3df-af41-a252-1724-9d63774fe164",
"REVOLUT_customerName": "John Smith",
"REVOLUT_customerPhoneNumber": "+447123456789",
"url": "https://revolut.com/redirectUrl",
"REVOLUT_customerEmail": "[email protected]"
}
},
"psp": {
"name": "Revolut",
"transactionId": "6908a3df-af41-a252-1724-9d63774fe164"
},
"pspId": "REVOLUT",
"customerOrderCode": "fde96b4r-1a1s-4327-a769-0f3362337yg5",
"merchantTransactionId": "{{$guid}}"
}Additional Information
| Type | Notes |
|---|---|
| Payments | For Revolut to attempt a “one-tap”, you must provide the browser details to BR-DGE |
| Payments | In the event of a challenge, BR-DGE will return the same redirection response as if you were making the payment without a RevolutCustomerId |
| Payments | Subscribe to BR-DGE notifications to be notified of when authorisation has been completed and captured, or use BR-DGE GET payments endpoints. |
Revolut Pay Payout
Revolut Pay Payouts via BR-DGE use a payInReference type of paymentInstrument meaning you must have completed a successful Payment for the customer before you are able to payout to their account.
BR-DGE requires your Revolut merchant account to have been enabled to share "RevTags" for payouts through BR-DGE to be processed. This setting must be enabled before the initial payment that will be referenced as the payInReference else the RevTag will not be retrieved by BR-DGE.
To enable RevTags on your Revolut Pay account, contact the Revolut merchant support team.
To create a Revolut Pay Payout you should send a request similar to the following to the BR-DGE POST /v1/payouts REST API endpoint.
{
"amount": 1000,
"currencyCode": "GBP",
"reference": "ABCDD33DD33",
"purpose": "leisure",
"recipient": {
"firstName": "John",
"lastName": "Smith"
},
"paymentInstrument": {
"type": "payInReference",
"paymentId": "{{PaymentID}}"
}
}You should expect to receive a response similar to the following:
{
"code": "2101",
"id": "6908b1a3b8fc32ad55ee8433da9d3b4c",
"message": "Pending",
"paymentId": "f0ae9bc5-d3b8-4c86-ab12-fd2ab2760e2e",
"payoutEligibility": {
"crossBorderGambling": "UNKNOWN",
"crossBorderMoneyTransfer": "UNKNOWN",
"crossBorderNonMoneyTransfer": "UNKNOWN",
"domesticGambling": "UNKNOWN",
"domesticMoneyTransfer": "UNKNOWN",
"domesticNonMoneyTransfer": "UNKNOWN"
},
"psp": {
"name": "Revolut",
"transactionId": "6908b1a4-75b3-a31e-a261-efra4e1c125c"
},
"amount": 1000,
"currencyCode": "GBP"
}Revolut Pay Payouts will always enter an initial Pending state, once Revolut have processed the Payout the transaction will be updated to a final Approved status. You can subscribe to receive transaction status updates using BR-DGE Notifications
Onboarding & Support
To enable Revolut Pay on your BR-DGE retail channels, please get in touch with our support team.
Updated about 6 hours ago
