Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
OverviewExplore all products
Start building
Start developing
Sample projects
About the APIs
Build with LLMs
Use Stripe without code
Set up Stripe
Create an account
Web Dashboard
Mobile Dashboard
Migrate to Stripe
Manage fraud risk
Understand fraud
Radar fraud protection
    Overview
    Integration
    Radar Session
    Risk evaluation
    Multiprocessor Radar scores
    Risk settings
    Reviews
      Risk insights
      Uncaptured payments
    Lists
    Rules
    Radar analytics
    Radar for Platforms
Manage disputes
Verify identities
HomeGet startedRadar fraud protectionReviews

Reviewing uncaptured payments

Learn how to use reviews if your Stripe integration uses auth and capture.

Copy page

By default, you create Stripe payments in one step, which requires no further action on your part to send the funds to your bank account.

However, Stripe also supports two-step payments, often called auth and capture. If your integration uses this technique, keep in mind that approving a review and capturing a payment are separate actions.

Reviewing uncaptured payments in the Dashboard

When Stripe places an uncaptured payment in review, the Dashboard displays a Capture button in addition to the set of buttons for closing the review by approving or refunding it. Also, because refunding uncaptured payments is often called “releasing” or “reversing,” uncaptured payments have a Cancel button instead of a Refund button.

Note

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
  • When 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.

Ruby
# Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
# 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 previous step left the 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 (for example, 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/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
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 7 days. Otherwise, as with any other uncaptured payment, the authorization automatically expires and you can no longer capture the payment.

Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc