AltorLabFree Scan →
HomeError CodesSHOPIFY_BILLING_ATTEMPT_TIMEOUT
shopify

Shopify Subscription Billing Attempt Timeout

Root cause

A subscriptionBillingAttemptCreate mutation was submitted but the async billing job did not complete within the expected window — either due to a Shopify platform delay, payment gateway timeout, or a polling implementation that stopped checking before the job resolved.

Symptoms

How to fix it

1

Poll the billing attempt status for up to 30 minutes

Shopify's subscription billing jobs are asynchronous and can take up to 15 minutes to resolve under load. Poll subscriptionBillingAttempt every 2 minutes for up to 30 minutes after creating the attempt. Check the ready field: false means still processing, true means resolved (check errorCode for success or failure). Do not abandon polling before the 30-minute window — premature abandonment causes state drift.

2

Check Shopify Status for platform incidents

If a billing attempt has not resolved after 30 minutes, check status.shopify.com for active incidents affecting subscription billing or payment processing. Shopify platform incidents can delay billing job resolution by hours. If an incident is active, wait for it to resolve before creating a new billing attempt — creating a duplicate attempt during an incident can result in double-billing.

Open in admin →
3

Implement a dead-letter queue for unresolved billing attempts

Store every created billing attempt ID with a creation timestamp. Run a daily job that checks any billing attempt older than 2 hours that has not resolved to success or failure. For these dead-letter attempts, query Stripe directly to determine if a charge was created. If Stripe shows no charge, create a new billing attempt. If Stripe shows a successful charge, create the Shopify order manually.

Frequently asked questions

Is it safe to create a new billing attempt if the original one timed out?

Only after verifying in Stripe that no charge was created for the original attempt. If the original billing attempt created a Stripe charge (even if Shopify did not confirm it), creating a new billing attempt will double-charge the customer. Always check Stripe for an existing charge on the same day before creating a replacement billing attempt.

How do I prevent billing attempt timeouts from causing silent revenue loss?

Never assume a billing attempt resolved successfully because you did not receive a failure webhook — timeouts create a third state where the attempt neither succeeded nor failed. Implement a billing attempt tracker that stores IDs with timestamps and alerts on any attempt older than 2 hours without a confirmed outcome.

Detect this error automatically

Free cross-stack scan finds all billing errors in 60 seconds.

Run Free Scan →