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
onTokenizecallback fired and thepm_xxxwas sent to your server - The confirm endpoint was called with the
payment_methodfield set - No errors were returned from the confirm call
Webhook not received
Section titled “Webhook not received”- 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 - Check account status — a suspended or deactivated account stops webhook delivery
- Check
livemode— sandbox events only go to sandbox-mode endpoints; live events go to live-mode endpoints - 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 deliveriesmeans no subscription matched the event
refund_amount_exceeds_available error
Section titled “refund_amount_exceeds_available error”The sum of all refund amounts for this payment intent would exceed the original payment amount. Check existing refunds before issuing another:
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.
Customer on hold unexpectedly
Section titled “Customer on hold unexpectedly”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:
- Open the customer detail page and check the Activity Log for how the customer was created
- 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.
API key rejected (401)
Section titled “API key rejected (401)”Causes:
- Key has been revoked — check Developer → API keys for revocation date
- Key has expired — check the
expires_atfield - Mode mismatch — sandbox key used against a live endpoint, or vice versa
- Key copied with leading/trailing whitespace — verify the key value exactly
Plan not scheduling
Section titled “Plan not scheduling”- Plan is in
draftstate — 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 indraftusually 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
activewith 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