Skip to content

Common Issues

Payment intent stuck in requires_payment_method

Section titled “Payment intent stuck in requires_payment_method”

The card was not tokenized, or confirm was never called.

Check:

  • The widget’s onTokenize callback fired and the pm_xxx was sent to your server
  • The confirm endpoint was called with the payment_method field set
  • No errors were returned from the confirm call
  1. Check the endpoint is reachable — it must be publicly resolvable over HTTPS (not localhost) and return a 2xx quickly. Endpoints are configured by ElasticPay, so if you are unsure which URL is registered, ask support to confirm it
  2. Check account status — a suspended or deactivated account stops webhook delivery
  3. Check livemode — sandbox events only go to sandbox-mode endpoints; live events go to live-mode endpoints
  4. Check the delivery status — open the payment intent, payment plan, or customer the event relates to and look at the Events panel. Each row shows the event type and the latest delivery status with an attempt count. No deliveries means no subscription matched the event

The sum of all refund amounts for this payment intent would exceed the original payment amount. Check existing refunds before issuing another:

Terminal window
curl https://staging-api.elasticpay.co/api/v1/payment_intents/pi_0abc123/refunds \
-H "Authorization: Bearer sk_sandbox_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Sum the amount fields of all succeeded refunds. The remaining refundable amount is original_amount - total_refunded.

A customer is on hold because they were created with a payment method still to be collected (waiting for payment method). Collecting a valid payment method clears the hold automatically. To resolve it:

  1. Open the customer detail page and check the Activity Log for how the customer was created
  2. Use Collect Payment Details, or resend the email link, to capture a payment method

hold doesn’t stop payments on its own. If a customer isn’t being charged, see plan not scheduling.

Causes:

  • Key has been revoked — check Developer → API keys for revocation date
  • Key has expired — check the expires_at field
  • Mode mismatch — sandbox key used against a live endpoint, or vice versa
  • Key copied with leading/trailing whitespace — verify the key value exactly
  • Plan is in draft state — click Activate to begin scheduling. If the plan was created through the deferred payment-method flow, it activates automatically once the method is collected; a plan still in draft usually means the setup hasn’t succeeded yet
  • Plan is suspended — a failed payment method suspends the plans that use it, and any new payment method saved for the customer resumes them. A plan you suspended, or one suspended for your review, stays suspended until you open it and click Resume. See payment method recovery
  • Plan is inactive — click Activate to start scheduling again
  • Plan is closed — a closed plan can’t be reopened; create a new plan
  • Plan is active with nothing scheduled — it has collected its total. Raise the total or add a payment to collect more. See When a plan reaches its total
  • Start date is in the future — the scheduler creates intents up to 366 days ahead from today