What 'total amount was not captured' means in a payment failure
Last updated: June 30, 2026
When a payment fails with this message, the error comes directly from Stripe, not from Lago. Lago passes the Stripe message through unchanged, so the wording you see is Stripe's own. To find out exactly what Stripe rejected, read the failure reason from the webhook Lago fires, not from the payment record.
Where to find the failure reason
The failure fires an invoice.payment_failure webhook to your endpoint, and that webhook is the only place the reason surfaces. Start with its provider_error object: error_code (a Stripe code such as amount_too_small or authentication_required) and message (the human-readable text, where "total amount was not captured" appears). These two are always present and usually enough.
When the payment was initiated by Lago, the payload also carries error_details with the fuller Stripe error and a link to the matching dashboard log, nested at error_details.http_body.error.request_log_url (not at the top level). Failures Stripe reports asynchronously may include only provider_error, so treat error_code as your reliable fallback.
The GET /api/v1/payments/{id} endpoint shows that a payment failed (status: "failed") but not why, so do not rely on it for the reason.
How to resolve
Use provider_error.error_code to understand the root cause. Common next steps:
Ask the customer to update their payment method.
Check with Stripe for any holds or blocks on the card.
Retry the payment once the underlying issue is resolved.
This article reflects guidance drawn from customer case resolutions. It is not officially supported documentation and may not apply to all situations.