--- title: "Testing payments and modifications" description: "Test payments and modifications with your integration and troubleshoot issues before it goes live." url: "https://docs.adyen.com/development-resources/testing/payments-and-modifications" source_url: "https://docs.adyen.com/development-resources/testing/payments-and-modifications.md" canonical: "https://docs.adyen.com/development-resources/testing/payments-and-modifications" last_modified: "2024-09-02T12:55:00+02:00" language: "en" --- # Testing payments and modifications Test payments and modifications with your integration and troubleshoot issues before it goes live. [View source](/development-resources/testing/payments-and-modifications.md) It is important to test that your integration can handle payments and [payment modifications](/get-started-with-adyen/adyen-glossary/#payment-modifications-definition). This page describes how to test: * Payments in general and payments with encrypted card details, third-party authentication data, or Level 2/3 data. * Modifications like manual, partial, and failed captures; full, partial, and failed refunds; reversals; and authorization adjustments. We recommend that you: * Use our [test card numbers](/development-resources/test-cards-and-credentials/test-card-numbers/) for different brands and use [test credentials for other payment methods](/development-resources/test-cards-and-credentials/alternative-payment-method-credentials) that support it. * Start each test with a test payment with the amount of **100**. * Test each modification below to make sure your integration can handle different payment scenarios: * [Payment](#payment) * [Payment with encrypted card details](#payment-with-encrypted-card-details) * [Payment with third-party authentication data](#payment-with-third-party-authentication-data) * [Manual capture](#manual-capture) * [Partial manual capture](#partial-manual-capture) * [Multiple partial capture](#multiple-partial-manual-capture) * [Failed capture](#failed-capture) * [Cancel](#cancel) * [Full refund](#full-refund) * [Partial refund](#partial-refund) * [Multiple partial refund](#multiple-partial-refund) * [Reversal](#reversal) * [Pre-authorization and adjustment](#pre-authorization-and-adjustment) * [Payment with Level 2/3 data](#payments-with-level-2-3-data) ## Payment Test making a payment. After selecting the **Pay** button: 1. On your client-side, if you were redirected to another page or app, get redirected to your website or app after completing the payment. 2. Get the [**AUTHORISATION** webhook](/development-resources/webhooks/webhook-types/#default-event-codes) on your server. It includes the status of the payment. ## Payment with encrypted card details If your client-side integration is not complete yet, you can test your server with encrypted card details in your API request. Add the prefix `test_` to the test card credentials. For example, to use the Mastercard test card with the number **5555555555554444**, use the following in your API request: **Test encrypted card details** ```json { ... "paymentMethod": { "type": "scheme", "encryptedCardNumber": "test_5555555555554444", "encryptedExpiryMonth": "test_03", "encryptedExpiryYear": "test_2030", "encryptedSecurityCode": "test_737" } } ``` ## Payment with third-party authentication data If you use a third-party 3D Secure provider to get authentication data and use Adyen to authorise payments, you can test the [authorisation-only flow](/online-payments/3d-secure/other-3ds-flows/authorize-mpidata/) using the following payment details: | Card number | Expiry date | Security code (CVC/CVV/CID) | | ------------------- | ----------- | --------------------------- | | 4917 6100 0000 0000 | 03/2030 | 737 | 1. From your server, make a test [payment request with the information required for the authorisation-only flow](/online-payments/3d-secure/other-3ds-flows/authorize-mpidata/#make-a-payment-with-third-party-authentication-data). 2. Get the [**AUTHORISATION** webhook](/development-resources/webhooks/webhook-types/#default-event-codes) on your server. It includes the status of the payment. ## Manual capture Test [manually capturing](/online-payments/capture/#manual-capture) a full payment amount. After making the test payment: 1. [Capture the full (**100**) test payment manually](/online-payments/capture/#capture-a-payment). 2. Get the **CAPTURE** webhook on your server. ## Partial manual capture Test [manually capturing](/online-payments/capture/#manual-capture) a partial payment amount. In a partial manual capture, you manually capture less than the full payment amount. After making the test payment: 1. [Capture part (less than **100**) of the test payment manually](/online-payments/capture/#capture-a-payment). 2. Get the **CAPTURE** webhook on your server. The remaining amount of the payment is automatically cancelled. ## Multiple partial manual capture Test [manually capturing](/online-payments/capture/#manual-capture) multiple partial payment amounts. In multiple partial manual captures, you manually capture less than the full payment amount. Then, you manually capture another amount, until you have captured the full payment amount. You must contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to enable this. After making the test payment: 1. [Manually capture part (less than **100**) of the test payment](/online-payments/capture/#capture-a-payment). 2. Get the **CAPTURE** webhook on your server. The `amount.value` in the webhook is the amount you captured. 3. Manually capture the remaining amount of the test payment. 4. Get the **CAPTURE** webhook on your server. ## Failed capture Rarely, a [capture can fail](/online-payments/capture/#failed-capture) even after you receive a successful **CAPTURE** webhook. To test a failed capture scenario: 1. Make a [card payment](/payment-methods/cards), specifying: * `holderName`: **capture failed**. 2. Get the [**AUTHORISATION** webhook](/development-resources/webhooks/webhook-types/#default-event-codes) on your server. It includes the status of the payment. 3. [Capture](/online-payments/capture) this payment, using either automatic or manual capture. 4. Get the **CAPTURE\_FAILED** webhook on your server. It can take up to 24 hours for the failed modification simulation to finish. ## Cancel Test [canceling](/online-payments/cancel/) an authorized payment. You can only cancel a payment if it is set for [delayed automatic capture](/online-payments/capture/#delayed-automatic-capture) or [manual capture](/online-payments/capture/#manual-capture). After making the test payment: 1. Get the [**AUTHORISATION** webhook](/development-resources/webhooks/webhook-types/#default-event-codes) on your server. It includes the status of the payment. 2. [Cancel the test payment](/online-payments/cancel/#cancel-api). 3. Get the **CANCELLATION** webhook on your server. ## Full refund Test [refunding](/online-payments/refund/) a full payment amount. After making the test payment: 1. [Refund the full (**100**) test payment](/online-payments/refund/#refund-a-payment). 2. Get the **REFUND** webhook on your server. ## Partial refund Test [refunding](/online-payments/refund/) a partial payment amount. After making the test payment: 1. [Refund part (less than **100**) of the test payment](/online-payments/refund/#refund-a-payment). 2. Get the **REFUND** webhook on your server. ## Multiple partial refund Test [refunding](/online-payments/refund/) a [partially captured](/online-payments/capture/#partial-capture) payment amount. After making the test payment: 1. [Capture part (less than **100**) of the test payment manually](/online-payments/capture/#capture-a-payment). 2. Get the **CAPTURE** webhook on your server. 3. [Refund the partially captured amount](/online-payments/refund/#refund-a-payment), using the PSP reference of the original test payment in the request. 4. Get the **REFUND** webhook on your server. ## Failed refund Rarely, a [refund can fail](/online-payments/refund#refund-failed) even after you receive a successful **REFUND** webhook. To test a failed refund scenario: 1. Make a [card payment](/payment-methods/cards), specifying: * `holderName`: **refund failed**. 2. Get the [**AUTHORISATION** webhook](/development-resources/webhooks/webhook-types/#default-event-codes) on your server. It includes the status of the payment. 3. [Refund](/online-payments/refund) this payment, either in your [Customer Area](/account/manage-payments#refund-a-payment), or with an [API request](/online-payments/refund#refund-a-payment). 4. Get the **REFUND\_FAILED** webhook on your server. It can take up to 24 hours for the failed modification simulation to finish. ## Reversal Test [reversing](/online-payments/reversal/) a payment amount to return funds to a shopper. After making the test payment: 1. [Reverse the test payment](/online-payments/reversal/#reverse), using the PSP reference of the PSP reference of the original test payment in the request. 2. Get the **CANCEL\_OR\_REFUND** webhook on your server. ## Pre-authorization and adjustment Test [pre-authorization](/online-payments/adjust-authorisation/#authorisation-types) of a payment amount. This is only available for cards and Klarna. 1. [Pre-authorize](/online-payments/adjust-authorisation/adjust-with-preauth/#pre-authorize) a payment with the amount of **100**. 2. Get the [**AUTHORISATION** webhook](/development-resources/webhooks/webhook-types/#default-event-codes) on your server. It includes the status of the payment. Test an authorisation adjustment where you change the authorized amount. 1. [Modify the authorization](/online-payments/adjust-authorisation/adjust-with-preauth/#adjust-auth) with the new amount of **175**. 2. Get the **ADJUST\_AUTHORISATION** webhook on your server. ## Payment with level 2/3 data Test payments that include [level 2 or level 3 data](/payment-methods/cards/enhanced-scheme-data). You must contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to enable the setting to include enhanced scheme data in your [Customer Area](https://ca-live.adyen.com/). Use the following test card numbers. Each card number corresponds to a different response: | Card number | Expiry Date | CVC | Response | | ------------------- | ----------- | --- | -------- | | 4444 3333 2222 1111 | 03/2030 | 737 | VGIS | | 2222 4107 4036 0010 | 03/2030 | 737 | L2 | | 5555 5555 5555 4444 | 03/2030 | 737 | L3 | 1. Submit a payment request with one of the following card numbers. 2. In the response, get the `additionalData` field that includes the level 2/3 data you submitted. 3. Get the [**AUTHORISATION** webhook](/development-resources/webhooks/webhook-types/#default-event-codes) on your server. It includes the status of the payment.