{"title":"Pix Open Finance","category":"default","creationDate":1676638860,"content":"<div class=\"additional-info-block output-inline\">\n<div class=\"additional-info-block__body\"><p><img src=\"\/payment-methods\/pix\/open-finance\/pix.svg?resize=40\" alt=\"\" \/>&nbsp; <strong>Read more<\/strong><\/p><p>Learn more about <a href=\"https:\/\/www.bcb.gov.br\/en\/financialstability\/open_finance\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Open Finance<\/a>.<\/p><\/div><\/div>\n\n<p>Open Finance is the Brazilian open banking system. Open Finance enables faster and secure checkout experiences for shoppers when paying with Pix. During the initial payment, the shopper grants consent to Adyen to act as a payment initiator on their behalf. This is called an enrollment, and removes the need for the shopper to complete authentication for each payment on their banking app when they are using the same device.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirements, limitations, and preparations.<\/p>\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 built an <a href=\"\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=API%20only&amp;version=latest\">API-only<\/a> integration using Checkout API v69 or later.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><a href=\"\/development-resources\/webhooks\" target=\"_blank\">Webhooks<\/a><\/strong><\/td>\n<td style=\"text-align: left;\">Subscribe to the following webhook(s): <ul><li>Standard webhooks<\/li><li><a href=\"\/development-resources\/webhooks\/webhook-types#other-webhooks\" target=\"_blank\">Recurring tokens life cycle events<\/a> webhook<\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">The following limitations are applied by the Brazilian Central Bank: <ul><li>Transactions must be less than 500 reais.<li> The shopper's browser must meet the version requirements to use WebAuth: <br>- Chrome v67 or later <br> - Firefox v60 or later <br> - Safari v13 or later <br> - Opera v54 or later <\/li><\/ul> <br> Recurring Pix payments are in development. If you are interested in joining the pilot, reach out to your Adyen contact. Some of the processes and documentation may change as the feature evolves.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">Before you begin, <a href=\"\/payment-methods\/add-payment-methods\" target=\"_blank\">add Pix in your Customer Area<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<p>Pix Open Finance works with enrollments. An enrollment is a record of consent that the shopper lets Adyen act as a payment initiator on behalf of the shopper. Instead of storing the payment details of a shopper, Adyen receives a confirmation from Open Finance Brazil.<\/p>\n<p>When a shopper proceeds to check out with Pix Open Finance, you check if the shopper and their device are already enrolled. You must implement your own logic to check whether the shopper is already enrolled.<\/p>\n<ul>\n<li>If the shopper is enrolled, you proceed to the payment, and offer a faster checkout experience by using their enrollment data.<\/li>\n<li>If the shopper is not enrolled, you make a request to enroll the shopper and their device. After they are enrolled, you proceed to the payment.<\/li>\n<\/ul>\n<h3>Enrollment<\/h3>\n<ol>\n<li>You make a <a href=\"\/get-started-with-adyen\/adyen-glossary\/#zero-value-auth\" target=\"_blank\">zero-value authorization request<\/a> to 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> endpoint to get the shopper's consent. In the response, you get a link for an Adyen-hosted payment page.<\/li>\n<li>You redirect the shopper to the Adyen-hosted payment page, where they select their bank from a list provided by Open Finance Brazil.<\/li>\n<li>The shopper is redirected to their bank's website or app to authorizing the zero-value transaction.<\/li>\n<li>The shopper is redirected to the Adyen-hosted payment page, and completes the enrollment by authenticating with their biometrics.<\/li>\n<li>After the shopper completes their enrollment, you get the confirmation in a <a href=\"\/online-payments\/tokenization\/managing-tokens#webhooks\" target=\"_blank\">Recurring tokens lifecycle events webhook<\/a>.<\/li>\n<li>The shopper is redirected to your website or app, and you make a  <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 to check the result.<\/li>\n<\/ol>\n<h3>Subsequent payments<\/h3>\n<p>After an enrollment is created, subsequent payments where the shopper is using the same device, you can make payments using only biometric authentication. This removes the need for the shopper to be redirected to their bank's website or app to authorize the transaction.<\/p>\n<ol>\n<li>You make a  <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> request to get the link for an Adyen-hosted payment page.<\/li>\n<li>You redirect the shopper to the Adyen-hosted payment page.<\/li>\n<li>On the payment page, the shopper authenticates using biometrics.<\/li>\n<li>After successful authentication, the payment is authorized, you make a  <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 to check the result.<\/li>\n<\/ol>\n<h2 id=\"create-enrollment\">Create an enrollment<\/h2>\n<p>To enroll a shopper and their device with Open Finance so that Adyen can act as a payment initiator:<\/p>\n<ol>\n<li>Make a <span translate=\"no\"><strong>POST<\/strong><\/span>  <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> request. In your request, include:<\/li>\n<\/ol>\n<ul>\n<li>\n<p><strong>Standard tokenization parameters<\/strong>:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameters<\/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><span translate=\"no\"><strong>paybybank_pix<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td><code>paymentMethod.subtype<\/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><span translate=\"no\"><strong>redirect<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-returnUrl\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">returnUrl<\/a><\/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>The URL to which your shopper should be redirected to after they complete the enrollement on the Adyen-hosted payment page.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-reference\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reference<\/a><\/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>The reference to uniquely identify a payment.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperReference\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperReference<\/a><\/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>Your unique identifier for the shopper. Minimum length: three characters. This field is case-sensitive. <div class=\"sc-notice note\"><div> Do not include personally identifiable information (PII), such as name or email address.  <\/div><\/div><\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperInteraction\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperInteraction<\/a><\/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>Set to <span translate=\"no\"><strong>Ecommerce<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-recurringProcessingModel\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">recurringProcessingModel<\/a><\/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>Set to <span translate=\"no\"><strong>CardOnFile<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-storePaymentMethod\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">storePaymentMethod<\/a><\/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>Set to <span translate=\"no\"><strong>true<\/strong><\/span> to store the shopper's payment details for future recurring payments.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-amount\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">amount<\/a><\/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>Set to <strong>0<\/strong> to complete a zero-value authorization.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>\n<p><strong>Pix-specific parameters<\/strong>:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameters<\/th>\n<th>Required<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperName\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperName<\/a><\/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>The first and last name of the shopper.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-socialSecurityNumber\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">socialSecurityNumber<\/a><\/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>The shopper's CPF or CNPJ number. This will be shown to the shopper on the Pix payment form.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Make a \/payments request to enroll the shopper'\" :id=\"'pix-enrollment'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v72\\\/payments \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n    \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n    \\&quot;amount\\&quot;: {\\n        \\&quot;currency\\&quot;: \\&quot;BRL\\&quot;,\\n        \\&quot;value\\&quot;: 0\\n    },\\n    \\&quot;returnUrl\\&quot;: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout?shopperOrder=12xy\\&quot;,\\n    \\&quot;reference\\&quot;: \\&quot;YOUR_PAYMENT_REFERENCE\\&quot;,\\n    \\&quot;paymentMethod\\&quot;: {\\n        \\&quot;type\\&quot;: \\&quot;paybybank_pix\\&quot;,\\n        \\&quot;subtype\\&quot;: \\&quot;redirect\\&quot;\\n    },\\n    \\&quot;shopperName\\&quot;: {\\n        \\&quot;firstName\\&quot;: \\&quot;John\\&quot;,\\n        \\&quot;lastName\\&quot;: \\&quot;Smith\\&quot;\\n    },\\n    \\&quot;shopperReference\\&quot;: \\&quot;YOUR_SHOPPER_REFERENCE\\&quot;\\n    \\&quot;shopperInteraction\\&quot;: \\&quot;Ecommerce\\&quot;,\\n    \\&quot;recurringProcessingModel\\&quot;: \\&quot;CardOnFile\\&quot;,\\n    \\&quot;socialSecurityNumber\\&quot;: \\&quot;01234567890\\&quot;\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The response contains the following data:<\/p>\n<ul>\n<li><a href=\"\/online-payments\/build-your-integration\/payment-result-codes\/\">\n  <code>resultCode<\/code>\n<\/a>: <span translate=\"no\"><strong>RedirectShopper<\/strong><\/span><\/li>\n<li><code>action<\/code>: contains the information that you must use to redirect the shopper.<\/li>\n<\/ul>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Example \/payments response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n   \\\"resultCode\\\":\\\"RedirectShopper\\\",\\n       \\\"action\\\":{\\n           \\\"paymentMethodType\\\":\\\"paybybank_pix\\\",\\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<\/li>\n<\/ul>\n<ol start=\"2\">\n<li>\n<p>From the response, use the <code>action<\/code> field that contains <code>method<\/code>, <code>url<\/code> and <code>paymentMethodType<\/code> to redirect the shopper to the Adyen-hosted payment page.<br \/>\nOn the Adyen-hosted payment page:<\/p>\n<ol>\n<li>The shopper selects their bank, and get redirected to their bank's website or app.<\/li>\n<li>The shopper authorizes the transaction in their bank's environment,<\/li>\n<li>The shopper is redirected to the Adyen-hosted payment page to complete authentication with biometrics.<\/li>\n<li>When the enrollment is completed, the shopper is redirected to your website.<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>After the shopper is redirected back to your website, check the payment result by making a <span translate=\"no\"><strong>POST<\/strong><\/span>  <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>, specifying:<\/p>\n<ul>\n<li>\n<p><code>details<\/code>: object that contains the URL-decoded <code>redirectResult<\/code> returned when the shopper was redirected back to your site.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Example \/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\\\/v72\\\/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<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>In the response, note the following:<\/p>\n<ul>\n<li><a href=\"\/online-payments\/build-your-integration\/payment-result-codes\/#final-payment-status\">\n  <code>resultCode<\/code>\n<\/a>: use this to present the result to your shopper.<\/li>\n<li>\n<p><code>pspReference<\/code>: our unique identifier for the transaction.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'\/payments\/details response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"resultCode\\\": \\\"Authorised\\\",\\n  \\\"pspReference\\\": \\\"V4HZ4RBFJGXXGN82\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Wait for the following <a href=\"\/development-resources\/webhooks\">webhooks<\/a> to get:<\/p>\n<ul>\n<li>The outcome of your request.<\/li>\n<li><code>storedPaymentMethodId<\/code>: if the payment was successfully authorized, you receive the unique identifier for the shopper's enrollment in this field. You need this ID when you:\n<ul>\n<li>Make a payment.<\/li>\n<li>Cancel an enrollment.<\/li>\n<\/ul><\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>Webhook<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/AUTHORISATION\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">AUTHORISATION<\/a><\/td>\n<td>Contains the <code>success<\/code> field, that informs you whether the zero-value authorization transaction is authorized.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Tokenization-webhooks\/latest\/post\/recurring.token.created\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">recurring.token.created<\/a><\/td>\n<td>Contains the <code>shopperReference<\/code>, and the <code>storedPaymentMethodId<\/code>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>When you receive an  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/AUTHORISATION\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">AUTHORISATION<\/a> webhook with <code>success<\/code>: <span translate=\"no\"><strong>true<\/strong><\/span>, you can proceed to <a href=\"#make-payments\">make a payment with the enrollment details<\/a>.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"make-payments\">Make a payment with an enrollment<\/h2>\n<p>When you enroll a shopper, Adyen stores the enrollment confirmation, and the device ID linked to the enrollment. When you make a  <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> request with an amount greater than <strong>0<\/strong>, we check whether an enrollment exists for the device your shopper is using, and trigger the Open Finance payment flow.<\/p>\n<p>To make a payment:<\/p>\n<ol>\n<li>Make a <span translate=\"no\"><strong>POST<\/strong><\/span>  <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> request, including:<\/li>\n<\/ol>\n<ul>\n<li>\n<p><strong>Standard tokenization parameters<\/strong>:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameters<\/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><span translate=\"no\"><strong>paybybank_pix<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td><code>paymentMethod.subtype<\/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><span translate=\"no\"><strong>redirect<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td><code>paymentMethod.storedPaymentMethodId<\/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>The unique identifier for the shopper's enrollment that you received in the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Tokenization-webhooks\/latest\/post\/recurring.token.created\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">recurring.token.created<\/a> webhook.  <br><br>  Alternatively, you can also get the enrollment identifier by making a  <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> request including  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-merchantAccount\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">merchantAccount<\/a>, and  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperReference\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperReference<\/a>. In the response, the <code>id<\/code> in the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/paymentMethods#responses-200-storedPaymentMethods\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">storedPaymentMethods<\/a> array is the enrollment identifier.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-reference\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reference<\/a><\/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>The reference to uniquely identify a payment.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-returnUrl\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">returnUrl<\/a><\/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>The URL to which your shopper should be redirected to after they complete the enrollement on the Adyen-hosted payment page.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-amount\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">amount<\/a><\/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>The <code>currency<\/code> and <code>value<\/code> of the recurring payment, in <a href=\"\/development-resources\/currency-codes\/\">minor units<\/a>. The <code>value<\/code> must be greater than <strong>0<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperReference\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperReference<\/a><\/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>Your unique identifier for the shopper. Must be the same one you included with the <a href=\"#create-enrollment\">request to enroll the shopper<\/a>.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperInteraction\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperInteraction<\/a><\/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>Set to <span translate=\"no\"><strong>ContAuth<\/strong><\/span>.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-recurringProcessingModel\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">recurringProcessingModel<\/a><\/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>Set to <span translate=\"no\"><strong>CardOnFile<\/strong><\/span>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>\n<p><strong>Pix-specific parameters<\/strong>:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameters<\/th>\n<th>Required<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperName\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperName<\/a><\/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>The first and last name of the shopper.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-socialSecurityNumber\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">socialSecurityNumber<\/a><\/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>The shopper's CPF or CNPJ number. This will be shown to the shopper on the Pix payment form.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Make a subsequent payment'\" :id=\"'pix-subsequent-payment-with-enrollment'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v72\\\/payments \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n    \\&quot;merchantAccount\\&quot;: \\&quot;ADYEN_MERCHANT_ACCOUNT\\&quot;,\\n    \\&quot;amount\\&quot;: {\\n        \\&quot;currency\\&quot;: \\&quot;BRL\\&quot;,\\n        \\&quot;value\\&quot;: 100000\\n    },\\n    \\&quot;returnUrl\\&quot;: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout?shopperOrder=12xy\\&quot;,\\n    \\&quot;reference\\&quot;: \\&quot;YOUR_PAYMENT_REFERENCE\\&quot;,\\n    \\&quot;paymentMethod\\&quot;: {\\n        \\&quot;type\\&quot;: \\&quot;paybybank_pix\\&quot;,\\n        \\&quot;subtype\\&quot;: \\&quot;redirect\\&quot;,\\n        \\&quot;storedPaymentMethodId\\&quot;: \\&quot;8816092311242510\\&quot;\\n    },\\n    \\&quot;shopperName\\&quot;: {\\n        \\&quot;firstName\\&quot;: \\&quot;John\\&quot;,\\n        \\&quot;lastName\\&quot;: \\&quot;Smith\\&quot;\\n    },\\n    \\&quot;shopperReference\\&quot;: \\&quot;YOUR_SHOPPER_REFERENCE\\&quot;,\\n    \\&quot;shopperInteraction\\&quot;: \\&quot;ContAuth\\&quot;,\\n    \\&quot;recurringProcessingModel\\&quot;: \\&quot;CardOnFile\\&quot;,\\n    \\&quot;socialSecurityNumber\\&quot;: \\&quot;01234567890\\&quot;\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The response contains the following data:<\/p>\n<ul>\n<li><a href=\"\/online-payments\/build-your-integration\/payment-result-codes\/\" target=\"_blank\">\n  <code>resultCode<\/code>\n<\/a>: <span translate=\"no\"><strong>RedirectShopper<\/strong><\/span><\/li>\n<li><code>action<\/code>: contains the information that you must use to redirect the shopper.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ol start=\"2\">\n<li>\n<p>From the response, use the <code>action<\/code> field that contains <code>method<\/code>, <code>url<\/code> and <code>paymentMethodType<\/code> to redirect the shopper to the Adyen-hosted payment page.<br \/>\nWhen making a payment for an enrolled shopper, the shopper has to complete authentication using their biometrics, but they are not redirected to their bank environment. After the payment is successfully authenticated, the shopper is redirected to your website.<\/p>\n<\/li>\n<li>\n<p>After the shopper is redirected back to your website, check the payment result by making a <span translate=\"no\"><strong>POST<\/strong><\/span>  <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>, specifying:<\/p>\n<ul>\n<li>\n<p><code>details<\/code>: object that contains the URL-decoded <code>redirectResult<\/code> returned when the shopper was redirected back to your site.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Example \/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\\\/v72\\\/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;X6XtfGC3!Y...\\&quot;\\n }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>In the response, note the following:<\/p>\n<ul>\n<li><code>resultCode<\/code>: the outcome of the request.<\/li>\n<li>\n<p><code>pspReference<\/code>: our unique identifier for the transaction.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'\/payments\/details response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"resultCode\\\": \\\"Received\\\",\\n  \\\"pspReference\\\": \\\"NC6HT9CRT65ZGN82\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Depending on the <code>resultCode<\/code> you get, inform the shopper.<\/p>\n<table>\n<thead>\n<tr>\n<th><code>resultCode<\/code><\/th>\n<th>Action<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span translate=\"no\"><strong>Received<\/strong><\/span><\/td>\n<td>The payment will be completed asynchronously. This is an <a href=\"\/online-payments\/build-your-integration\/payment-result-codes#intermediate\/\" target=\"_blank\">intermediate result code<\/a> that indicates the payment has not reached a final state yet. You receive the payment outcome in an  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Webhooks\/latest\/post\/AUTHORISATION\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">AUTHORISATION<\/a> webhook.<\/td>\n<\/tr>\n<tr>\n<td><span translate=\"no\"><strong>UnmatchedDevice<\/strong><\/span><\/td>\n<td>The shopper is using a device that does not match the one they used for the enrollment. Inform the shopper about the error.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ol>\n<h2>Cancel an enrollment<\/h2>\n<p>If a shopper wants to revoke their consent and cancel their enrollment, <a href=\"\/online-payments\/tokenization\/managing-tokens\/#delete-stored-details\" target=\"_blank\">delete the stored details<\/a> with a <span translate=\"no\"><strong>DELETE<\/strong><\/span>  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/delete\/storedPaymentMethods\/(storedPaymentMethodId)\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/storedPaymentMethods\/{storedPaymentMethodId}<\/a> request.<\/p>\n<p>When stored details are deleted, you receive a <a href=\"\/online-payments\/tokenization\/managing-tokens\/#id2000129436\" target=\"_blank\"><code>recurring.token.disabled<\/code> webhook<\/a>.<\/p>\n<h2>See also<\/h2>\n<ul>\n<li><a href=\"\/payment-methods\/pix\/api-only\/\">Pix API only<\/a><\/li>\n<li><a href=\"\/online-payments\/tokenization\">Tokenization<\/a><\/li>\n<\/ul>","url":"https:\/\/docs.adyen.com\/payment-methods\/pix\/open-finance","articleFields":{"description":"Accept Pix payments seamlessly with Open Finance.","parameters":{"payment_method":"Pix","integration":"API-only","platform":"Web"},"last_edit_on":"25-03-2024 16:08","feedback_component":true,"filters_component":false,"decision_tree":"[]","page_id":"e5637127-4012-4e6b-83b7-76141858f393"},"algolia":{"url":"https:\/\/docs.adyen.com\/payment-methods\/pix\/open-finance","title":"Pix Open Finance","content":"\n&nbsp; Read moreLearn more about Open Finance.\n\nOpen Finance is the Brazilian open banking system. Open Finance enables faster and secure checkout experiences for shoppers when paying with Pix. During the initial payment, the shopper grants consent to Adyen to act as a payment initiator on their behalf. This is called an enrollment, and removes the need for the shopper to complete authentication for each payment on their banking app when they are using the same device.\nRequirements\nBefore you begin, take into account the following requirements, limitations, and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nMake sure that you have built an API-only integration using Checkout API v69 or later.\n\n\nWebhooks\nSubscribe to the following webhook(s): Standard webhooksRecurring tokens life cycle events webhook\n\n\nLimitations\nThe following limitations are applied by the Brazilian Central Bank: Transactions must be less than 500 reais. The shopper's browser must meet the version requirements to use WebAuth: - Chrome v67 or later  - Firefox v60 or later  - Safari v13 or later  - Opera v54 or later   Recurring Pix payments are in development. If you are interested in joining the pilot, reach out to your Adyen contact. Some of the processes and documentation may change as the feature evolves.\n\n\nSetup steps\nBefore you begin, add Pix in your Customer Area.\n\n\n\nHow it works\nPix Open Finance works with enrollments. An enrollment is a record of consent that the shopper lets Adyen act as a payment initiator on behalf of the shopper. Instead of storing the payment details of a shopper, Adyen receives a confirmation from Open Finance Brazil.\nWhen a shopper proceeds to check out with Pix Open Finance, you check if the shopper and their device are already enrolled. You must implement your own logic to check whether the shopper is already enrolled.\n\nIf the shopper is enrolled, you proceed to the payment, and offer a faster checkout experience by using their enrollment data.\nIf the shopper is not enrolled, you make a request to enroll the shopper and their device. After they are enrolled, you proceed to the payment.\n\nEnrollment\n\nYou make a zero-value authorization request to the  \/payments endpoint to get the shopper's consent. In the response, you get a link for an Adyen-hosted payment page.\nYou redirect the shopper to the Adyen-hosted payment page, where they select their bank from a list provided by Open Finance Brazil.\nThe shopper is redirected to their bank's website or app to authorizing the zero-value transaction.\nThe shopper is redirected to the Adyen-hosted payment page, and completes the enrollment by authenticating with their biometrics.\nAfter the shopper completes their enrollment, you get the confirmation in a Recurring tokens lifecycle events webhook.\nThe shopper is redirected to your website or app, and you make a  \/payments\/details request to check the result.\n\nSubsequent payments\nAfter an enrollment is created, subsequent payments where the shopper is using the same device, you can make payments using only biometric authentication. This removes the need for the shopper to be redirected to their bank's website or app to authorize the transaction.\n\nYou make a  \/payments request to get the link for an Adyen-hosted payment page.\nYou redirect the shopper to the Adyen-hosted payment page.\nOn the payment page, the shopper authenticates using biometrics.\nAfter successful authentication, the payment is authorized, you make a  \/payments\/details request to check the result.\n\nCreate an enrollment\nTo enroll a shopper and their device with Open Finance so that Adyen can act as a payment initiator:\n\nMake a POST  \/payments request. In your request, include:\n\n\n\nStandard tokenization parameters:\n\n\n\nParameters\nRequired\nDescription\n\n\n\n\npaymentMethod.type\n\npaybybank_pix\n\n\npaymentMethod.subtype\n\nredirect\n\n\n returnUrl\n\nThe URL to which your shopper should be redirected to after they complete the enrollement on the Adyen-hosted payment page.\n\n\n reference\n\nThe reference to uniquely identify a payment.\n\n\n shopperReference\n\nYour unique identifier for the shopper. Minimum length: three characters. This field is case-sensitive.  Do not include personally identifiable information (PII), such as name or email address.  \n\n\n shopperInteraction\n\nSet to Ecommerce.\n\n\n recurringProcessingModel\n\nSet to CardOnFile.\n\n\n storePaymentMethod\n\nSet to true to store the shopper's payment details for future recurring payments.\n\n\n amount\n\nSet to 0 to complete a zero-value authorization.\n\n\n\n\n\nPix-specific parameters:\n\n\n\nParameters\nRequired\nDescription\n\n\n\n\n shopperName\n\nThe first and last name of the shopper.\n\n\n socialSecurityNumber\n\nThe shopper's CPF or CNPJ number. This will be shown to the shopper on the Pix payment form.\n\n\n\n\n\n\nThe response contains the following data:\n\n\n  resultCode\n: RedirectShopper\naction: contains the information that you must use to redirect the shopper.\n\n\n\n\n\n\n\n\nFrom the response, use the action field that contains method, url and paymentMethodType to redirect the shopper to the Adyen-hosted payment page.\nOn the Adyen-hosted payment page:\n\nThe shopper selects their bank, and get redirected to their bank's website or app.\nThe shopper authorizes the transaction in their bank's environment,\nThe shopper is redirected to the Adyen-hosted payment page to complete authentication with biometrics.\nWhen the enrollment is completed, the shopper is redirected to your website.\n\n\n\nAfter the shopper is redirected back to your website, check the payment result by making a POST  \/payments\/details, specifying:\n\n\ndetails: object that contains the URL-decoded redirectResult returned when the shopper was redirected back to your site.\n\n\n\n\n\n\n\nIn the response, note the following:\n\n\n  resultCode\n: use this to present the result to your shopper.\n\npspReference: our unique identifier for the transaction.\n\n\n\n\n\n\n\nWait for the following webhooks to get:\n\nThe outcome of your request.\nstoredPaymentMethodId: if the payment was successfully authorized, you receive the unique identifier for the shopper's enrollment in this field. You need this ID when you:\n\nMake a payment.\nCancel an enrollment.\n\n\n\n\n\nWebhook\nDescription\n\n\n\n\n AUTHORISATION\nContains the success field, that informs you whether the zero-value authorization transaction is authorized.\n\n\n recurring.token.created\nContains the shopperReference, and the storedPaymentMethodId.\n\n\n\nWhen you receive an  AUTHORISATION webhook with success: true, you can proceed to make a payment with the enrollment details.\n\n\nMake a payment with an enrollment\nWhen you enroll a shopper, Adyen stores the enrollment confirmation, and the device ID linked to the enrollment. When you make a  \/payments request with an amount greater than 0, we check whether an enrollment exists for the device your shopper is using, and trigger the Open Finance payment flow.\nTo make a payment:\n\nMake a POST  \/payments request, including:\n\n\n\nStandard tokenization parameters:\n\n\n\nParameters\nRequired\nDescription\n\n\n\n\npaymentMethod.type\n\npaybybank_pix\n\n\npaymentMethod.subtype\n\nredirect\n\n\npaymentMethod.storedPaymentMethodId\n\nThe unique identifier for the shopper's enrollment that you received in the  recurring.token.created webhook.    Alternatively, you can also get the enrollment identifier by making a  \/paymentMethods request including  merchantAccount, and  shopperReference. In the response, the id in the  storedPaymentMethods array is the enrollment identifier.\n\n\n reference\n\nThe reference to uniquely identify a payment.\n\n\n returnUrl\n\nThe URL to which your shopper should be redirected to after they complete the enrollement on the Adyen-hosted payment page.\n\n\n amount\n\nThe currency and value of the recurring payment, in minor units. The value must be greater than 0.\n\n\n shopperReference\n\nYour unique identifier for the shopper. Must be the same one you included with the request to enroll the shopper.\n\n\n shopperInteraction\n\nSet to ContAuth.\n\n\n recurringProcessingModel\n\nSet to CardOnFile.\n\n\n\n\n\nPix-specific parameters:\n\n\n\nParameters\nRequired\nDescription\n\n\n\n\n shopperName\n\nThe first and last name of the shopper.\n\n\n socialSecurityNumber\n\nThe shopper's CPF or CNPJ number. This will be shown to the shopper on the Pix payment form.\n\n\n\n\n\n\nThe response contains the following data:\n\n\n  resultCode\n: RedirectShopper\naction: contains the information that you must use to redirect the shopper.\n\n\n\n\n\nFrom the response, use the action field that contains method, url and paymentMethodType to redirect the shopper to the Adyen-hosted payment page.\nWhen making a payment for an enrolled shopper, the shopper has to complete authentication using their biometrics, but they are not redirected to their bank environment. After the payment is successfully authenticated, the shopper is redirected to your website.\n\n\nAfter the shopper is redirected back to your website, check the payment result by making a POST  \/payments\/details, specifying:\n\n\ndetails: object that contains the URL-decoded redirectResult returned when the shopper was redirected back to your site.\n\n\n\n\n\n\n\nIn the response, note the following:\n\nresultCode: the outcome of the request.\n\npspReference: our unique identifier for the transaction.\n\n\n\n\n\n\n\nDepending on the resultCode you get, inform the shopper.\n\n\n\nresultCode\nAction\n\n\n\n\nReceived\nThe payment will be completed asynchronously. This is an intermediate result code that indicates the payment has not reached a final state yet. You receive the payment outcome in an  AUTHORISATION webhook.\n\n\nUnmatchedDevice\nThe shopper is using a device that does not match the one they used for the enrollment. Inform the shopper about the error.\n\n\n\n\n\nCancel an enrollment\nIf a shopper wants to revoke their consent and cancel their enrollment, delete the stored details with a DELETE  \/storedPaymentMethods\/{storedPaymentMethodId} request.\nWhen stored details are deleted, you receive a recurring.token.disabled webhook.\nSee also\n\nPix API only\nTokenization\n","type":"page","locale":"en","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Payment methods","lvl2":"Pix","lvl3":"Pix Open Finance"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/payment-methods","lvl2":"https:\/\/docs.adyen.com\/payment-methods\/pix","lvl3":"\/payment-methods\/pix\/open-finance"},"levels":4,"category":"Payment method","category_color":"green","tags":["Finance"]}}
