Skip to content

Stripe payment errorStripe: charge_already_captured

Stripe returns charge_already_captured when you try to capture a charge that has already been captured. Stripe says to inspect the charge to confirm whether the capture you meant to make is already complete. Stripe doesn’t say which API calls return this code.

Rather hand it over? App Fix Ticket: One reproducible bug in an existing mobile or web app, diagnosed and fixed.

Full refund if Simon can’t take it on once he sees your project, or if you cancel before work starts. Refund terms.

Short answer

Look the charge up before changing code. If it shows as captured, the capture you wanted has already happened and a second one isn’t needed. Use a different charge ID only if the code picked the wrong charge. Then check what sent the second capture request, such as a repeated webhook delivery or a second capture after a partial capture.

Rather not fix it yourself? App Fix Ticket starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.

Why the charge is already captured, and the fix

  1. 01

    The capture already went through

    “Inspect the charge to confirm whether the intended capture is complete.” Stripe, Error codes (charge_already_captured)

    Retrieve the charge and check whether it was captured. Also check: if it was, the request that failed was a repeat of one that already worked.

  2. 02

    The same webhook was handled twice

    “Webhook endpoints might occasionally receive the same event more than once.” Stripe, Receive Stripe events in your webhook endpoint

    Also check: if your code captures when a webhook arrives, a repeated delivery can trigger a second capture. Log the event IDs already processed and skip repeats.

  3. 03

    A second capture after a partial capture

    “If you partially capture a payment, you can’t perform another capture for the difference.” Stripe, Place a hold on a payment method

    Also check: after a partial capture, most payments can’t be captured again for the rest. Capture the final amount once, or save the customer’s payment method and create a future payment for the difference, as Stripe suggests.

  4. 04

    Check the PaymentIntent’s status

    “Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture.” Stripe, Capture a PaymentIntent

    Also check: a PaymentIntent can be captured only while its status is requires_capture, which needs capture_method set to manual when it is created.

Checked against the vendor’s docs on : Stripe docs: Error codes; Stripe docs: Place a hold on a payment method; Stripe API: Capture a PaymentIntent; Stripe docs: Webhooks.

Rather hand it over?

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

“Very responsive, attentive to fixing bugs, and completed the project as needed! Thank you!”
A buyer in the United States, July 2022. Shopify on Fiverr
All 127 Fiverr reviews

Related: Stripe charge_expired_for_capture · Stripe PaymentIntent already succeeded · Stripe idempotency key in use · Stripe charge_already_refunded

Questions

More on this error

Was the customer charged twice?

Stripe’s error text says the charge has already been captured. Open the charge in the Dashboard and check how many captures and charges exist for this payment before telling the customer anything.

Can I capture a held payment more than once?

Only where multicapture is available. Stripe says that for most payments you can perform only one capture on an authorized payment.

Can you fix it for me?

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

A different error?

Describe it and get a written quote

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.