{"title":"Revolut Pay for API only","category":"default","creationDate":1778167252,"content":"<p>You can add Revolut Pay to your existing integration. The following instructions show only what you must add to your integration specifically for Revolut Pay.<\/p>\n<p>If an instruction on this page corresponds with a step in the main integration guide, it includes a link to corresponding step of the main integration guide.<\/p>\n<h2>Requirements<\/h2>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">Make sure that you have an existing <a href=\"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=API%20only\">API-only integration<\/a>.<\/td>\n<td> <\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Redirect handling<\/strong><\/td>\n<td style=\"text-align: left;\">Make sure that your existing integration is set up to <a href=\"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=API%20only#handle-the-redirect\">handle the redirect<\/a>. <br>  <code>action.type<\/code>: <strong>redirect<\/strong>.<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<ol>\n<li>The shopper selects Revolut Pay as the payment method.<\/li>\n<li>The shopper enters their details in the <a href=\"#build-your-payment-form\">payment form that you build<\/a>.<\/li>\n<li>The shopper is redirected to the Revolut Pay app (mobile devices) or a Revolut Pay hosted payment page (desktops or laptops) where four different sign-in methods are offered: QR code, email, SMS, and passkey.<\/li>\n<li>The shopper authorizes the payment in the Revolut Pay app.<\/li>\n<\/ol>\n<h2 id=\"build-your-payment-form\">Build your payment form<\/h2>\n<p>Include Revolut Pay in the list of <a href=\"#get-pm\">available payment methods<\/a>. You do not need to collect any information from the shopper in your payment form.<\/p>\n<div class=\"notices green\">\n<p>You can <a href=\"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=API%2Bonly&amp;version=71#downloading-logos\">download the logo for Revolut Pay<\/a> to use in your form.<\/p>\n<\/div>\n<h2 id=\"get-pm\">Get Revolut Pay as an available payment method<\/h2>\n<p>When you make the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/paymentMethods\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/paymentMethods<\/a> to <a href=\"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=API%20only#get-available-payment-methods\">get available payment methods<\/a>, specify the following so that Revolut Pay is included in the response.<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Values<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/paymentMethods#request-amount-currency\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">amount.currency<\/a><\/td>\n<td><strong>EUR<\/strong>, <strong>GBP<\/strong>, <strong>PLN<\/strong>, <strong>RON<\/strong>, <strong>HUF<\/strong>, <strong>CHF<\/strong>, <strong>CZK<\/strong>, <strong>NOK<\/strong>, <strong>DKK<\/strong>, <strong>SEK<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request for available payment methods'\" :id=\"'payment-methods-request'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v71\\\/paymentMethods \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'idempotency-key: YOUR_IDEMPOTENCY_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-X POST\\n-d '{\\n   \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n   \\&quot;amount\\&quot;: {\\n      \\&quot;currency\\&quot;: \\&quot;GBP\\&quot;,\\n\\t  \\&quot;value\\&quot;: 1000\\n   }\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v41.1.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.checkout.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.model.RequestOptions;\\nimport com.adyen.service.checkout.*;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nAmount amount = new Amount()\\n  .currency(\\&quot;GBP\\&quot;)\\n  .value(1000L);\\n\\nPaymentMethodsRequest paymentMethodsRequest = new PaymentMethodsRequest()\\n  .amount(amount)\\n  .merchantAccount(\\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;);\\n\\n\\\/\\\/ Send the request\\nPaymentsApi service = new PaymentsApi(client);\\nPaymentMethodsResponse response = service.paymentMethods(paymentMethodsRequest, new RequestOptions().idempotencyKey(\\&quot;UUID\\&quot;));&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;&lt;?php\\n\\\/\\\/ Adyen PHP API Library v29.0.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\Checkout\\\\Amount;\\nuse Adyen\\\\Model\\\\Checkout\\\\PaymentMethodsRequest;\\nuse Adyen\\\\Service\\\\Checkout\\\\PaymentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$amount = new Amount();\\n$amount\\n  -&gt;setCurrency(\\&quot;GBP\\&quot;)\\n  -&gt;setValue(1000);\\n\\n$paymentMethodsRequest = new PaymentMethodsRequest();\\n$paymentMethodsRequest\\n  -&gt;setAmount($amount)\\n  -&gt;setMerchantAccount(\\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;);\\n\\n$requestOptions['idempotencyKey'] = 'UUID';\\n\\n\\\/\\\/ Send the request\\n$service = new PaymentsApi($client);\\n$response = $service-&gt;paymentMethods($paymentMethodsRequest, $requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .NET API Library v34.0.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Checkout;\\nusing Adyen.Service.Checkout;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nAmount amount = new Amount\\n{\\n  Currency = \\&quot;GBP\\&quot;,\\n  Value = 1000\\n};\\n\\nPaymentMethodsRequest paymentMethodsRequest = new PaymentMethodsRequest\\n{\\n  Amount = amount,\\n  MerchantAccount = \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;\\n};\\n\\n\\\/\\\/ Send the request\\nvar service = new PaymentsService(client);\\nvar response = service.PaymentMethods(paymentMethodsRequest, requestOptions: new RequestOptions { IdempotencyKey = \\&quot;UUID\\&quot;});&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v30.1.0\\nconst { Client, CheckoutAPI } = require('@adyen\\\/api-library');\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nconst config = new Config({\\n  apiKey: \\&quot;ADYEN_API_KEY\\&quot;,\\n  environment: EnvironmentEnum.TEST\\n});\\n\\nconst client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentMethodsRequest = {\\n  merchantAccount: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n  amount: {\\n    currency: \\&quot;GBP\\&quot;,\\n    value: 1000\\n  }\\n}\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.paymentMethods(paymentMethodsRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v21.2.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/checkout\\&quot;\\n)\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\namount := checkout.Amount{\\n  Currency: \\&quot;GBP\\&quot;,\\n  Value: 1000,\\n}\\n\\npaymentMethodsRequest := checkout.PaymentMethodsRequest{\\n  Amount: &amp;amount,\\n  MerchantAccount: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n}\\n\\n\\\/\\\/ Send the request\\nservice := client.Checkout()\\nreq := service.PaymentsApi.PaymentMethodsInput().IdempotencyKey(\\&quot;UUID\\&quot;).PaymentMethodsRequest(paymentMethodsRequest)\\nres, httpRes, err := service.PaymentsApi.PaymentMethods(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v14.0.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\n# For the LIVE environment, also include your liveEndpointUrlPrefix.\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\n# Create the request object(s)\\njson_request = {\\n  \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;amount\\&quot;: {\\n    \\&quot;currency\\&quot;: \\&quot;GBP\\&quot;,\\n    \\&quot;value\\&quot;: 1000\\n  }\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payment_methods(request=json_request, idempotency_key=\\&quot;UUID\\&quot;)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v11.2.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\n# For the LIVE environment, also include your liveEndpointUrlPrefix.\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :merchantAccount =&gt; 'ADYEN_MERCHANT_ACCOUNT',\\n  :amount =&gt; {\\n    :currency =&gt; 'GBP',\\n    :value =&gt; 1000\\n  }\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payment_methods(request_body, headers: { 'Idempotency-Key' =&gt; 'UUID' })&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v30.1.0\\nimport { Client, CheckoutAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nconst config = new Config({\\n  apiKey: \\&quot;ADYEN_API_KEY\\&quot;,\\n  environment: EnvironmentEnum.TEST\\n});\\n\\nconst client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nconst amount: Types.checkout.Amount = {\\n  currency: \\&quot;GBP\\&quot;,\\n  value: 1000\\n};\\n\\nconst paymentMethodsRequest: Types.checkout.PaymentMethodsRequest = {\\n  amount: amount,\\n  merchantAccount: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;\\n};\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.paymentMethods(paymentMethodsRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example response with Revolut Pay available'\" :id=\"'payment-methods-response'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"paymentMethods\\\": [\\n        {\\n            \\\"name\\\": \\\"Revolut Pay\\\",\\n            \\\"type\\\": \\\"revolutpay\\\"\\n        }\\n    ]\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"additional-parameters-payments\">Add additional parameters to your \/payments request<\/h2>\n<p>When you <a href=\"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=API%20only#make-a-payment\">make a payment<\/a>, add the following parameters:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Required<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>paymentMethod.type<\/code><\/td>\n<td><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td><strong>revolutpay<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>shopperName<\/code><\/td>\n<td><\/td>\n<td>The name of the person funding the money.<\/td>\n<\/tr>\n<tr>\n<td><code>telephoneNumber<\/code><\/td>\n<td><\/td>\n<td>The shopper's telephone number.<\/td>\n<\/tr>\n<tr>\n<td><code>shopperEmail<\/code><\/td>\n<td><\/td>\n<td>The email address of the person funding the money.<\/td>\n<\/tr>\n<tr>\n<td><code>shopperStatement<\/code><\/td>\n<td><\/td>\n<td>The text to be shown on the shopper's bank statement. Allowed characters: a-z, A-Z, 0-9, spaces, and special characters . , ' _ - ? + * \/. <br\/>The complete descriptor is built using the following format: <code>{base}{suffix}<\/code>, where:<br\/><code>{base}<\/code> is your Merchant name as specified in your Merchant settings at the time you added Revolut Pay to your merchant account. This name can't be changed afterward.<br\/><code>{suffix}<\/code> is defined by the value specified for the <code>shopperStatement<\/code> parameter. You can use &lt;= 19 characters. We recommend sending a maximum of 22 characters for the complete descriptor, otherwise banks might truncate the string.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example payment request for Revolut Pay'\" :id=\"'payments-request'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v71\\\/payments \\\\\\n-H 'x-API-key: ADYEN_API_KEY' \\\\\\n-H 'idempotency-key: YOUR_IDEMPOTENCY_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-X POST\\n-d '{\\n    \\&quot;paymentMethod\\&quot;: {\\n        \\&quot;type\\&quot;: \\&quot;revolutpay\\&quot;\\n        },\\n    \\&quot;merchantAccount\\&quot;: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n    \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n    \\&quot;amount\\&quot;: {\\n        \\&quot;currency\\&quot;: \\&quot;GBP\\&quot;,\\n        \\&quot;value\\&quot;: \\&quot;1000\\&quot;\\n        },\\n    \\&quot;shopperName\\&quot;: {\\n        \\&quot;firstName\\&quot;: \\&quot;Simone\\&quot;,\\n        \\&quot;lastName\\&quot;: \\&quot;Hopper\\&quot;\\n        },\\n    \\&quot;telephoneNumber\\&quot;: \\&quot;+44123456789\\&quot;,\\n    \\&quot;shopperEmail\\&quot;: \\&quot;s.hopper@example.com\\&quot;,\\n    \\&quot;returnUrl\\&quot;: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout?shopperOrder=12xy..\\&quot;\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v41.1.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.checkout.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.model.RequestOptions;\\nimport com.adyen.service.checkout.*;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\n\\\/\\\/ Send the request\\nPaymentsApi service = new PaymentsApi(client);\\nPaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey(\\&quot;UUID\\&quot;));&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;&lt;?php\\n\\\/\\\/ Adyen PHP API Library v29.0.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Service\\\\Checkout\\\\PaymentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$requestOptions['idempotencyKey'] = 'UUID';\\n\\n\\\/\\\/ Send the request\\n$service = new PaymentsApi($client);\\n$response = $service-&gt;payments($paymentRequest, $requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .NET API Library v34.0.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Checkout;\\nusing Adyen.Service.Checkout;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\n\\\/\\\/ Send the request\\nvar service = new PaymentsService(client);\\nvar response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = \\&quot;UUID\\&quot;});&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v30.1.0\\nconst { Client, CheckoutAPI } = require('@adyen\\\/api-library');\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nconst config = new Config({\\n  apiKey: \\&quot;ADYEN_API_KEY\\&quot;,\\n  environment: EnvironmentEnum.TEST\\n});\\n\\nconst client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentRequest = {\\n  paymentMethod: {\\n    type: \\&quot;revolutpay\\&quot;\\n  },\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  amount: {\\n    currency: \\&quot;GBP\\&quot;,\\n    value: \\&quot;1000\\&quot;\\n  },\\n  shopperName: {\\n    firstName: \\&quot;Simone\\&quot;,\\n    lastName: \\&quot;Hopper\\&quot;\\n  },\\n  telephoneNumber: \\&quot;+44123456789\\&quot;,\\n  shopperEmail: \\&quot;s.hopper@example.com\\&quot;,\\n  returnUrl: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout?shopperOrder=12xy..\\&quot;\\n}\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v21.2.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/checkout\\&quot;\\n)\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\n\\\/\\\/ Send the request\\nservice := client.Checkout()\\nreq := service.PaymentsApi.PaymentsInput().IdempotencyKey(\\&quot;UUID\\&quot;).PaymentRequest(paymentRequest)\\nres, httpRes, err := service.PaymentsApi.Payments(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v14.0.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\n# For the LIVE environment, also include your liveEndpointUrlPrefix.\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\n# Create the request object(s)\\njson_request = {\\n  \\&quot;paymentMethod\\&quot;: {\\n    \\&quot;type\\&quot;: \\&quot;revolutpay\\&quot;\\n  },\\n  \\&quot;merchantAccount\\&quot;: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;amount\\&quot;: {\\n    \\&quot;currency\\&quot;: \\&quot;GBP\\&quot;,\\n    \\&quot;value\\&quot;: \\&quot;1000\\&quot;\\n  },\\n  \\&quot;shopperName\\&quot;: {\\n    \\&quot;firstName\\&quot;: \\&quot;Simone\\&quot;,\\n    \\&quot;lastName\\&quot;: \\&quot;Hopper\\&quot;\\n  },\\n  \\&quot;telephoneNumber\\&quot;: \\&quot;+44123456789\\&quot;,\\n  \\&quot;shopperEmail\\&quot;: \\&quot;s.hopper@example.com\\&quot;,\\n  \\&quot;returnUrl\\&quot;: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout?shopperOrder=12xy..\\&quot;\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payments(request=json_request, idempotency_key=\\&quot;UUID\\&quot;)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v11.2.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\n# For the LIVE environment, also include your liveEndpointUrlPrefix.\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :paymentMethod =&gt; {\\n    :type =&gt; 'revolutpay'\\n  },\\n  :merchantAccount =&gt; 'YOUR_MERCHANT_ACCOUNT',\\n  :reference =&gt; 'YOUR_ORDER_NUMBER',\\n  :amount =&gt; {\\n    :currency =&gt; 'GBP',\\n    :value =&gt; '1000'\\n  },\\n  :shopperName =&gt; {\\n    :firstName =&gt; 'Simone',\\n    :lastName =&gt; 'Hopper'\\n  },\\n  :telephoneNumber =&gt; '+44123456789',\\n  :shopperEmail =&gt; 's.hopper@example.com',\\n  :returnUrl =&gt; 'https:\\\/\\\/your-company.example.com\\\/checkout?shopperOrder=12xy..'\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' =&gt; 'UUID' })&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v30.1.0\\nimport { Client, CheckoutAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\n\\\/\\\/ For the LIVE environment, also include your liveEndpointUrlPrefix.\\nconst config = new Config({\\n  apiKey: \\&quot;ADYEN_API_KEY\\&quot;,\\n  environment: EnvironmentEnum.TEST\\n});\\n\\nconst client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The response includes the <code>action.type<\/code>: <strong>redirect<\/strong>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example response with an additional action'\" :id=\"'payments-response'\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"resultCode\\\":\\\"RedirectShopper\\\",\\n    \\\"action\\\":{\\n        \\\"paymentMethodType\\\":\\\"revolutpay\\\",\\n        \\\"method\\\":\\\"GET\\\",\\n        \\\"url\\\":\\\"https:\\\/\\\/checkoutshopper-test.adyen.com\\\/checkoutshopper\\\/checkoutPaymentRedirect?redirectData=...\\\",\\n        \\\"type\\\":\\\"redirect\\\"\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>Handle the redirect<\/h2>\n<ol>\n<li>\n<p>To complete the payment, redirect the shopper to the <code>action.url<\/code> returned in the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> response, taking into account the following recommendations:<\/p>\n<ul>\n<li>When using the HTTP GET method:<br \/>\nFor security reasons, when showing the redirect in the app, we recommend that you use <a href=\"https:\/\/developer.apple.com\/documentation\/safariservices\/sfsafariviewcontroller\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">SFSafariViewController<\/a> for iOS or <a href=\"https:\/\/developer.chrome.com\/multidevice\/android\/customtabs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Chrome Custom Tabs<\/a> for Android, instead of WebView objects. Also refer to the <a href=\"https:\/\/developer.android.com\/topic\/security\/best-practices#webview\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">security best practices<\/a> for WebView.<\/li>\n<li>Redirection for mobile integrations:<br \/>\nFor mobile integrations, we strongly recommended that you redirect the shopper to the default browser of their device. Redirecting to the default browser ensures the best compatibility, handling of multi-factor authentication, app-to-app redirection, and error handling.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>After the shopper is redirected back to your website, check the payment result by making a POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a> request, specifying:<\/p>\n<ul>\n<li><code>details<\/code>: object that contains the URL-decoded <code>redirectResult<\/code> returned when the shopper was redirected back to your site.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'\/payments\/details request'\" :id=\"''\" :code-data=\"[{&quot;language&quot;:&quot;json&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v71\\\/payments\\\/details \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n    \\&quot;details\\&quot;: {\\n        \\&quot;redirectResult\\&quot;: \\&quot;eyJ0cmFuc1N0YXR1cyI6IlkifQ==\\&quot;\\n    }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>You receive a <code>\/payments\/details<\/code> response containing:<\/p>\n<ul>\n<li><code>resultCode<\/code>: Use this to present the result to your shopper.<\/li>\n<li><code>pspReference<\/code>: Our unique identifier for the transaction.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'\/payments\/details response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"pspReference\\\": \\\"V4HZ4RBFJGXXGN82\\\",\\n    \\\"resultCode\\\": \\\"Authorised\\\",\\n    \\\"amount\\\": {\\n        \\\"currency\\\": \\\"GBP\\\",\\n        \\\"value\\\": 1000\\n    },\\n    \\\"merchantReference\\\": \\\"MerchantReference\\\",\\n    \\\"paymentMethod\\\": {\\n        \\\"type\\\": \\\"revolutpay\\\"\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<h2>Show the payment result<\/h2>\n<p>Use the <code>resultCode<\/code> that you received in the <code>\/payments\/details<\/code> response to show your shopper the payment result.<\/p>\n<p>The <code>resultCode<\/code> values you can receive for Revolut Pay are:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">resultCode<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<th style=\"text-align: left;\">Action to Take<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Authorised<\/strong><\/td>\n<td style=\"text-align: left;\">The payment was successful.<\/td>\n<td style=\"text-align: left;\">Inform the shopper that the payment has been successful. Ship the goods after you successfully <a href=\"#capture\">capture<\/a> the payment.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Cancelled<\/strong><\/td>\n<td style=\"text-align: left;\">The shopper cancelled the payment while in the Revolut App.<\/td>\n<td style=\"text-align: left;\">Ask the shopper whether they want to continue with the order, or ask them to select a different payment method.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Error<\/strong><\/td>\n<td style=\"text-align: left;\">There was an error when the payment was being processed.<\/td>\n<td style=\"text-align: left;\">Inform the shopper that there was an error processing their payment. You'll receive a refusalReason in the same response, indicating the cause of the error.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Pending or Received<\/strong><\/td>\n<td style=\"text-align: left;\">The shopper has completed the payment but the final result is not yet known.<\/td>\n<td style=\"text-align: left;\">Inform the shopper that you have received their order, and are waiting for the payment to be completed. You will receive the final result of the payment in an <a href=\"\/development-resources\/webhooks\/webhook-types\">AUTHORISATION webhook<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Refused<\/strong><\/td>\n<td style=\"text-align: left;\">The payment was refused by the provider.<\/td>\n<td style=\"text-align: left;\">Ask the shopper to try the payment again using a different payment method.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>If the shopper fails to return to your website or app, wait for webhooks to know the outcome of the payment:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">eventCode<\/th>\n<th style=\"text-align: left;\">success field<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<th style=\"text-align: left;\">Action to take<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>AUTHORISATION<\/strong><\/td>\n<td style=\"text-align: left;\"><code>false<\/code><\/td>\n<td style=\"text-align: left;\">The transaction failed.<\/td>\n<td style=\"text-align: left;\">Cancel the order and inform the shopper that the payment failed.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>AUTHORISATION<\/strong><\/td>\n<td style=\"text-align: left;\"><code>true<\/code><\/td>\n<td style=\"text-align: left;\">The shopper successfully completed the payment.<\/td>\n<td style=\"text-align: left;\">Inform the shopper that the payment is successful and proceed with the order.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"capture\">Capture the payment<\/h2>\n<p>Depending on your <a href=\"\/online-payments\/capture\">capture<\/a> settings, Revolut Pay payments are captured manually or automatically, with or without a delay.<\/p>\n<p>If you use <a href=\"\/online-payments\/capture#manual-capture\">manual capture<\/a>, or <a href=\"\/online-payments\/capture#delayed-automatic-capture\">delayed automatic capture<\/a>, make sure to capture authorized Revolut Pay transactions within 7 days. After this timeframe, the authorization expires.<\/p>\n<p>Partial captures are supported. However, any portion of the authorization that is not captured is permanently released and cannot be captured later (single capture).<\/p>\n<p>Before you ship the goods, make sure that the payment is captured.<\/p>\n<p>If you do not intend to capture the payment, <a href=\"\/online-payments\/cancel#cancel\">make a request to cancel the payment<\/a> and release the authorized balance amount. This returns the receivable credit back to the shopper.<\/p>\n<h2>Refund a payment<\/h2>\n<p>Make a  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/(paymentPspReference)\/refunds\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/refunds<\/a> request to refund captured Revolut Pay payments. There is a twelve-month refund window for a payment after it has been captured.<\/p>\n<h2>Test and go live<\/h2>\n<p>Test your Revolut Pay integration using the test environment by following these steps:<\/p>\n<ol>\n<li>Add Revolut Pay to your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>.<\/li>\n<li>Create a payment request with Revolut Pay and perform the redirect.<\/li>\n<li>After you are redirected, select the option to <span translate=\"no\">continue in browser<\/span>.<br \/>\n<img alt=\"Step 3\" src=\"\/user\/pages\/reuse\/payment-method-pages\/revolutpay\/testing\/revolutpay_step3.png\" \/><\/li>\n<li>Use the phone number <strong>+31613390484<\/strong> and click <span translate=\"no\">Continue<\/span>.<\/li>\n<li>When prompted to provide your passcode, enter <strong>124455<\/strong>.<\/li>\n<li>When prompted to provide your 6-digit code, click <span translate=\"no\">Autofill code<\/span> in the top right corner of the modal.<\/li>\n<li>Click <span translate=\"no\">Pay<\/span> to proceed with the payment.<\/li>\n<li>When prompted to scan the QR code, click <span translate=\"no\">Approve<\/span> or <span translate=\"no\">Reject<\/span> the payment in the top right corner of the modal. You are then redirected back to the <code>returnUrl<\/code>.<br \/>\n<img alt=\"Step 8\" src=\"\/user\/pages\/reuse\/payment-method-pages\/revolutpay\/testing\/revolutpay_step8.png\" \/><\/li>\n<\/ol>\n<div class=\"notices green\">\n<p>The test environment differs from the live Revolut Pay flow. Because there is no test version of the Revolut retail app, some interactions are simulated rather than replicated exactly. You can learn more about testing in the <a href=\"https:\/\/developer.revolut.com\/docs\/guides\/accept-payments\/get-started\/test-implementation\/test-flows\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Revolut developer documentation<\/a>.<\/p>\n<\/div>\n<p>Check the status of Revolut Pay test payments in your <a href=\"https:\/\/ca-test.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a> &gt; <strong>Transactions<\/strong> &gt; <strong>Payments<\/strong>.<\/p>\n<p>Before you can accept live Revolut Pay payments, <a href=\"https:\/\/docs.adyen.com\/payment-methods\/add-payment-methods\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">submit a request for Revolut Pay<\/a> in your <a href=\"https:\/\/ca-live.adyen.com\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Customer Area<\/a>.<\/p>\n<h2 id=\"see-also\">See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=API%20only\"\n                        target=\"_self\"\n                        >\n                    API-only integration guide\n                <\/a><\/li><li><a href=\"\/development-resources\/webhooks\"\n                        target=\"_self\"\n                        >\n                    Webhooks\n                <\/a><\/li><li><a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/CheckoutService\/latest\/overview\"\n                        target=\"_blank\"\n                         class=\"external\">\n                    API Explorer\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/payment-methods\/revolutpay\/api-only","articleFields":{"description":"Add Revolut Pay to your API-only integration.","never_cache_twig":true,"parameters":{"flow":"Advanced","integration_guide_url":"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&integration=API%20only","payment_method":"Revolut Pay","payment_method_type":"revolutpay","payment_method_type_capitalized":"Revolutpay","tx_variant":"revolutpay","tx_variant_capitalized":"Revolutpay","country_codes":"<strong>AT<\/strong>, <strong>BE<\/strong>, <strong>CH<\/strong>, <strong>CY<\/strong>, <strong>CZ<\/strong>, <strong>DE<\/strong>, <strong>DK<\/strong>, <strong>EE<\/strong>, <strong>ES<\/strong>, <strong>FI<\/strong>, <strong>FR<\/strong>, <strong>GB<\/strong>, <strong>GR<\/strong>, <strong>HR<\/strong>, <strong>HU<\/strong>, <strong>IE<\/strong>, <strong>IT<\/strong>, <strong>LT<\/strong>, <strong>LU<\/strong>, <strong>LV<\/strong>, <strong>MT<\/strong>, <strong>NL<\/strong>, <strong>NO<\/strong>, <strong>PL<\/strong>, <strong>PT<\/strong>, <strong>RO<\/strong>, <strong>SE<\/strong>, <strong>SI<\/strong>, <strong>SK<\/strong>, <strong>US<\/strong>","currency_codes":"<strong>EUR<\/strong>, <strong>GBP<\/strong>, <strong>PLN<\/strong>, <strong>RON<\/strong>, <strong>HUF<\/strong>, <strong>CHF<\/strong>, <strong>CZK<\/strong>, <strong>NOK<\/strong>, <strong>DKK<\/strong>, <strong>SEK<\/strong>","additional_api":"true","api_version":"none","action_type":"<strong>redirect<\/strong>","pm_directory":"revolutpay","contact":"false"}},"algolia":{"url":"https:\/\/docs.adyen.com\/payment-methods\/revolutpay\/api-only","title":"Revolut Pay for API only","content":"You can add Revolut Pay to your existing integration. The following instructions show only what you must add to your integration specifically for Revolut Pay.\nIf an instruction on this page corresponds with a step in the main integration guide, it includes a link to corresponding step of the main integration guide.\nRequirements\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nMake sure that you have an existing API-only integration.\n \n\n\nRedirect handling\nMake sure that your existing integration is set up to handle the redirect.   action.type: redirect.\n\n\n\n\nHow it works\n\nThe shopper selects Revolut Pay as the payment method.\nThe shopper enters their details in the payment form that you build.\nThe shopper is redirected to the Revolut Pay app (mobile devices) or a Revolut Pay hosted payment page (desktops or laptops) where four different sign-in methods are offered: QR code, email, SMS, and passkey.\nThe shopper authorizes the payment in the Revolut Pay app.\n\nBuild your payment form\nInclude Revolut Pay in the list of available payment methods. You do not need to collect any information from the shopper in your payment form.\n\nYou can download the logo for Revolut Pay to use in your form.\n\nGet Revolut Pay as an available payment method\nWhen you make the  \/paymentMethods to get available payment methods, specify the following so that Revolut Pay is included in the response.\n\n\n\nParameter\nValues\n\n\n\n\n amount.currency\nEUR, GBP, PLN, RON, HUF, CHF, CZK, NOK, DKK, SEK\n\n\n\n\n    \n\n\n    \n\nAdd additional parameters to your \/payments request\nWhen you make a payment, add the following parameters:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\npaymentMethod.type\n\nrevolutpay\n\n\nshopperName\n\nThe name of the person funding the money.\n\n\ntelephoneNumber\n\nThe shopper's telephone number.\n\n\nshopperEmail\n\nThe email address of the person funding the money.\n\n\nshopperStatement\n\nThe text to be shown on the shopper's bank statement. Allowed characters: a-z, A-Z, 0-9, spaces, and special characters . , ' _ - ? + * \/. The complete descriptor is built using the following format: {base}{suffix}, where:{base} is your Merchant name as specified in your Merchant settings at the time you added Revolut Pay to your merchant account. This name can't be changed afterward.{suffix} is defined by the value specified for the shopperStatement parameter. You can use &lt;= 19 characters. We recommend sending a maximum of 22 characters for the complete descriptor, otherwise banks might truncate the string.\n\n\n\n\n    \n\nThe response includes the action.type: redirect.\n\n    \n\nHandle the redirect\n\n\nTo complete the payment, redirect the shopper to the action.url returned in the  \/payments response, taking into account the following recommendations:\n\nWhen using the HTTP GET method:\nFor security reasons, when showing the redirect in the app, we recommend that you use SFSafariViewController for iOS or Chrome Custom Tabs for Android, instead of WebView objects. Also refer to the security best practices for WebView.\nRedirection for mobile integrations:\nFor mobile integrations, we strongly recommended that you redirect the shopper to the default browser of their device. Redirecting to the default browser ensures the best compatibility, handling of multi-factor authentication, app-to-app redirection, and error handling.\n\n\n\nAfter the shopper is redirected back to your website, check the payment result by making a POST  \/payments\/details request, specifying:\n\ndetails: object that contains the URL-decoded redirectResult returned when the shopper was redirected back to your site.\n\n\n\n\nYou receive a \/payments\/details response containing:\n\nresultCode: Use this to present the result to your shopper.\npspReference: Our unique identifier for the transaction.\n\n\n\n\n\n\nShow the payment result\nUse the resultCode that you received in the \/payments\/details response to show your shopper the payment result.\nThe resultCode values you can receive for Revolut Pay are:\n\n\n\nresultCode\nDescription\nAction to Take\n\n\n\n\nAuthorised\nThe payment was successful.\nInform the shopper that the payment has been successful. Ship the goods after you successfully capture the payment.\n\n\nCancelled\nThe shopper cancelled the payment while in the Revolut App.\nAsk the shopper whether they want to continue with the order, or ask them to select a different payment method.\n\n\nError\nThere was an error when the payment was being processed.\nInform the shopper that there was an error processing their payment. You'll receive a refusalReason in the same response, indicating the cause of the error.\n\n\nPending or Received\nThe shopper has completed the payment but the final result is not yet known.\nInform the shopper that you have received their order, and are waiting for the payment to be completed. You will receive the final result of the payment in an AUTHORISATION webhook.\n\n\nRefused\nThe payment was refused by the provider.\nAsk the shopper to try the payment again using a different payment method.\n\n\n\nIf the shopper fails to return to your website or app, wait for webhooks to know the outcome of the payment:\n\n\n\neventCode\nsuccess field\nDescription\nAction to take\n\n\n\n\nAUTHORISATION\nfalse\nThe transaction failed.\nCancel the order and inform the shopper that the payment failed.\n\n\nAUTHORISATION\ntrue\nThe shopper successfully completed the payment.\nInform the shopper that the payment is successful and proceed with the order.\n\n\n\nCapture the payment\nDepending on your capture settings, Revolut Pay payments are captured manually or automatically, with or without a delay.\nIf you use manual capture, or delayed automatic capture, make sure to capture authorized Revolut Pay transactions within 7 days. After this timeframe, the authorization expires.\nPartial captures are supported. However, any portion of the authorization that is not captured is permanently released and cannot be captured later (single capture).\nBefore you ship the goods, make sure that the payment is captured.\nIf you do not intend to capture the payment, make a request to cancel the payment and release the authorized balance amount. This returns the receivable credit back to the shopper.\nRefund a payment\nMake a  \/refunds request to refund captured Revolut Pay payments. There is a twelve-month refund window for a payment after it has been captured.\nTest and go live\nTest your Revolut Pay integration using the test environment by following these steps:\n\nAdd Revolut Pay to your Customer Area.\nCreate a payment request with Revolut Pay and perform the redirect.\nAfter you are redirected, select the option to continue in browser.\n\nUse the phone number +31613390484 and click Continue.\nWhen prompted to provide your passcode, enter 124455.\nWhen prompted to provide your 6-digit code, click Autofill code in the top right corner of the modal.\nClick Pay to proceed with the payment.\nWhen prompted to scan the QR code, click Approve or Reject the payment in the top right corner of the modal. You are then redirected back to the returnUrl.\n\n\n\nThe test environment differs from the live Revolut Pay flow. Because there is no test version of the Revolut retail app, some interactions are simulated rather than replicated exactly. You can learn more about testing in the Revolut developer documentation.\n\nCheck the status of Revolut Pay test payments in your Customer Area &gt; Transactions &gt; Payments.\nBefore you can accept live Revolut Pay payments, submit a request for Revolut Pay in your Customer Area.\nSee also\n\n\n                    API-only integration guide\n                \n                    Webhooks\n                \n                    API Explorer\n                \n","type":"page","locale":"en","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Payment methods","lvl2":"Revolut Pay","lvl3":"Revolut Pay for API only"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/payment-methods","lvl2":"https:\/\/docs.adyen.com\/payment-methods\/revolutpay","lvl3":"\/payment-methods\/revolutpay\/api-only"},"levels":4,"category":"Payment method","category_color":"green","tags":["Revolut"]},"articleFiles":{"revolutpay_step3.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/08.payment-methods\/74.revolutpay\/15.api-only\/revolutpay_step3.png\" \/>","revolutpay_step8.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/08.payment-methods\/74.revolutpay\/15.api-only\/revolutpay_step8.png\" \/>","payment-methods-request.js":"<p alt=\"\">payment-methods-request.js<\/p>","payment-methods-response.json":"<p alt=\"\">payment-methods-response.json<\/p>","payments-request.js":"<p alt=\"\">payments-request.js<\/p>","payments-response.json":"<p alt=\"\">payments-response.json<\/p>"}}
