Create account
Sign in
Home
Payments
Business operations
Financial services
Developer tools
Security
All products
Home
Payments
Business operations
Home
Payments
Business operations
Financial services
Developer tools
Support
Overview
Overview
Risk evaluation
Risk settings
Reviews
Risk insights
Uncaptured payments
Lists
Rules
Testing
Checklist
Disputes and fraud
Climate
Identity
radar
ยท
HomeBusiness operationsFraud detectionReviews

Reviewing uncaptured payments

If your Stripe integration uses auth and capture, read on to make sure reviews work well for you.

By default, with Stripe you create payments in one step, and with no further action on your part the funds are sent to your bank account.

However, Stripe also supports two-step payments, often called auth and capture. If your integration uses this technique, itโ€™s important to understand that approving a review and capturing a payment are separate actions.

Reviewing uncaptured payments in the Dashboard

When an uncaptured payment is placed in review, the Dashboard displays both a Capture button and a set of buttons to close the review by approving or refunding. (For uncaptured payments, refunding is often called โ€œreleasingโ€.)

Approving the review doesnโ€™t automatically capture the charge. You still need to click Capture.

Using the API to automatically capture approved payments

Through the API, you can set up your integration to:

  • Immediately capture payments not placed in review
  • Leave payments placed in review uncaptured
  • Once the review is approved, capture the payment

Immediately capture payments not placed in review

To create an uncaptured payment, set the capture behavior accordingly in the API request. On success, check the payment intentโ€™s review attribute. If the attribute is empty, capture the charge.

# Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key =
"sk_test_4eC39HqLyjWDarjtT1zdp7dc"
# Get the credit card details submitted by the form # Create a PaymentIntent with manual capture payment_intent = Stripe::PaymentIntent.create({ amount: 1000, currency: 'usd', payment_method: '{{PAYMENT_METHOD_ID}}', description: 'Example charge', confirm: true, capture_method: 'manual', }) # Check if the payment is in review. If not, capture it. if !payment_intent.review payment_intent.capture end

Capturing a payment after a review is approved

By design, the prior step left payments in review uncaptured. In this step, use webhooks to automate the process of capturing these payments upon approval.

Start by configuring your webhooks to listen for the review.closed event. The event data includes the review object, and the objectโ€™s reason attribute indicates whether the review was approved, or if it was closed for some other reason (e.g., the payment was refunded).

// Review object included in review.closed event webhook. { "id": "prv_08voh1589O8KAxCGPcIQpmkz", "object": "review", "payment_intent": "pi_1D0CsEITpIrAk4QYdrWDnbRS", "created": 1474379631, "livemode": false, "open": false, "reason": "approved" }

If reason is approved, capture the charge.

# Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key =
"sk_test_4eC39HqLyjWDarjtT1zdp7dc"
post "/my/webhook/url" do event_json = JSON.parse(request.body.read) event = Stripe::Event.retrieve(event_json["id"]) if event.type == 'review.closed' review = event.object if review.reason == 'approved' pi = Stripe::PaymentIntent.retrieve(review.payment_intent) pi.capture end end status 200 end

To capture approved payments, the review process must be completed within seven days. Otherwise, as with any other uncaptured payment, the authorization automatically expires and the payment can no longer be captured.

Was this page helpful?
Questions? Contact us.
Developer tutorials on YouTube.
You can unsubscribe at any time. Read our privacy policy.
On this page
Reviewing uncaptured payments in the Dashboard
Using the API to automatically capture approved payments