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 APIWebSDKHosted 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 StatusDescription
AUTHORIZATION_PENDINGWhen the Revolut Pay payment results in a redirect, the BR-DGE status is AUTHORIZATION_PENDING.
CAPTURE_PENDINGWhen 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.
CAPTUREDRevolut will inform BR-DGE when the payment has been captured. When the payment is frictionless, the BR-DGE status goes straight to CAPTURED.
AUTHORIZATION_DECLINEDShould 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 StatusBR-DGE Status
pendingAUTHORIZATION_PENDING
processingCAPTURE_PENDING
authorisedAUTHORIZED
completedCAPTURED
cancelledAUTHORIZATION_DECLINED
failedREJECTED
failed - the order has expiredEXPIRED

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 StatusDescription
PENDINGIf the payout request is successful, Revolut will provide a pending response to BR-DGE and confirm whether it was a success in due course
APPROVEDWhen the payout is completed, Revolut will notify BR-DGE, who will update the payout status to APPROVED.
DECLINEDIf 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 StatusBR-DGE Status
createdPENDING
pendingPENDING
completedAPPROVED
declinedDECLINED
failedDECLINED
revertedDECLINED

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 StatusBR-DGE Status
pendingVOID_PENDING
cancelledVOIDED

🚧

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 GET /v1/payments/{paymentId}/status REST API endpoint.

Payments

Revolut Pay has 2 different types of redirect, one for app2app redirection, and one for web redirection. Use the BR-DGE channel field to tell BR-DGE whether the request has come from a webpage or an app (iOS or Android), so the correct return URL is returned to you. If no channel is specified the default redirect type is web.

If you are using an app2app flow, you must provide an appReturnUrl in your payment request. Otherwise you must provide the successUrl, failureUrl and cancelUrl

Payments

After a payment is authorised, you can retrieve the Revolut Pay account fingerprint ID using the GET /v1/payments/{paymentId}/status REST API endpoint.

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

TypeNotes
PaymentsFor Revolut to attempt a “one-tap”, you must provide the browser details to BR-DGE
PaymentsIn the event of a challenge, BR-DGE will return the same redirection response as if you were making the payment without a RevolutCustomerId
PaymentsSubscribe 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.