Hold then Capture Card Test Cases

These detailed test cases can be used to check your Hold then Capture card integration with PayMongo. This step is optional but we highly recommend running these cases. These test cases were developed along with our internal QA team to account for every possible flow through the system.

Recommended Test Cases

For the Hold then Capture card feature, the test cases applied in the General Card Integration Test Cases section apply to manual capture payments but with capture_type set to manual. The failed scenarios will show up on authorization. You can also add the following failed scenarios in your testing:

Non-3DS Authorization

Note 1: No 3DS URL is returned upon attachment.

Note 2: Upon attachment, the Payment Intent status value is awaiting_capture.

Note 3: No 3DS URL is returned upon attachment and the Payment is paid.

Test InputExpected ResponseNotes
5555444444444457 with payment_intent.capture_type = manualSuccessful non-3DS authorization

Note 1 and 2 is applied.
As of the moment, this will currently not happen in production since we currently block non-3DS payments to minimize risk

Payment Intent status value can be verified by GET /payment_intents/id using your test keys.
4200000000000018 with payment_intent.capture_type = manualFailed non-3DS authorization

An error with the subcode card_expired should be returned upon attachment of the Payment Method.

Payment Intent status value is awaiting_payment_method.

A Payment object with a failed status is attached to the Payment Intent (in the Payments array section of the Payment Intent object).
Payment failed code should show the reason for the failure.

Failed subcode for failed Payment and Payment Intent should be card_expired.
Any of the successful authorization cases and captured amount <= payment intent amountSuccessful manual capture payment

Upon triggering the capture endpoint (with the amount in capture <= payment intent amount), the Payment Intent status value should become succeeded.

A Payment object with the paid status is attached to the Payment Intent (in the Payments array section of the Payment Intent object).

Note 2 and 3 is applied.
A successful authorization is needed to test a successful capture
capture amount > payment intent amountFailed manual capture payment

Upon triggering the capture endpoint (with amount in capture > payment intent amount), an error response is returned with the error subcode allowed_amount_exceeded.

A Payment object stays at awaiting_capture status and no failed or paid payment is created.

Note 2 and 3 is applied.
A successful authorization is needed to test a failed capture

3DS Authorization

Note 1: Upon attachment, the Payment Intent status value is awaiting_next_action and a redirect URL is returned.

Note 2: Open the redirect URL and select Authorize Test Payment to proceed with authorization and manual capture. An Authentication Complete message is returned on the webpage.

Note 3: Open the redirect URL and select Fail Test Payment to proceed with authorization and manual capture. An Authentication failed or cancelled message is returned on the webpage.

Test InputExpected ResponseNotes
4120000000000007 with payment_intent.capture_type = manual3DS payment with successful authentication and successful authorization

Proceed doing Note 1 and 2.

Payment Intent status value should become awaiting_capture.
This shows a successful 3DS authorization
5234000000000106 with payment_intent.capture_type = manual3DS payment with successful authentication and failed authorization

Proceed doing Note 1 and 2.

Payment Intent status value should become awaiting_payment_method.

A Payment object with failed status is attached to the Payment Intent (in the Payments array section of the Payment Intent object).

Failed subcode for failed Payment and Payment Intent should be generic_decline.
This shows a 3DS payment that passed authentication but failed in the authorization step.
4120000000000007 with payment_intent.capture_type = manual and pressing failed authentication in the test authentication page3DS payment with failed authentication

Proceed doing Note 1 and 3.

Payment Intent status value should stay as awaiting_payment_method.

No Payment object is attached to the Payment Intent.
This shows a 3DS authorization that failed in the authentication step.
Any of the successful authorization cases and captured amount <= payment intent amountSuccessful manual capture payment

Proceed doing Note 1 and 2.

Payment Intent status value should become awaiting_capture.

Upon triggering the capture endpoint (with the amount in capture <= Payment Intent amount), the Payment Intent status value should become succeeded.

A Payment object with paid status is attached to the Payment Intent (in the Payments array section of the Payment Intent object).
A successful authorization is needed to test a successful capture
capture amount > payment intent amountFailed manual capture payment

Proceed doing Note 1 and 2.

Payment Intent status value should become awaiting_capture.

Upon triggering the capture endpoint (with amount in capture > payment intent amount), an error response is returned with the error subcode allowed_amount_exceeded.

A Payment object stays at awaiting_capture status and no failed or paid Payment is created.
A successful authorization is needed to test a failed capture