Skip to main content

Payment Provider Unavailable

payment_provider_unavailable503

Billing · Affects all endpoints

The payment processor (Dodo) is unreachable or degraded. No charge was attempted. Try again shortly.

What this means

We tried to talk to the payment processor and couldn't reach it, or got back a response that indicated the processor itself is having problems. The user's payment never went through and no money moved. The user's existing subscription state is unchanged. This is a transient external dependency failure — usually clears in a few minutes.

When you'll see this

  • The processor's API is degraded or timing out (their incident, our error).
  • A regional outage affecting their infrastructure is in progress.
  • Network connectivity between our region and the processor's region is having issues.
  • The processor's status page shows an active incident affecting subscription creation or modification.
Learn more about how this works

Payment processors are the one part of the billing stack that we don't control. Even with perfect uptime on our side, the processor can have a bad ten minutes. We surface this as a clean 503 (Service Unavailable) so your retry logic knows the request is retriable, rather than a generic 500 that looks like our problem.

Worth knowing: this error never means the user was charged. The processor either didn't accept the request at all (network failure) or returned an error before initiating the charge. If you see ambiguity in production logs about whether a charge actually completed, contact support — we can confirm against the processor's reconciliation feed.

Example response

{
"success": false,
"error": "payment_provider_unavailable",
"message": "Payment provider is temporarily unavailable. Please try again shortly.",
"details": [],
"retry_after": null,
"doc_url": "https://docs.asterwise.com/reference/errors/payment_provider_unavailable",
"request_id": "req_01HXYZABCDEFGH",
"timestamp": "2026-05-25T12:34:56Z"
}
NEW TO APIS?
Quick fix
  1. Wait 2-5 minutes and retry the checkout or upgrade action.
  2. If the processor has an active incident, status.asterwise.com will reflect it.
  3. If you've waited and retried and it keeps failing, email [email protected] — extended processor outages are rare but real, and we can update you on ETA.
PRODUCTION ENGINEER
Recovery pattern

Retriable with backoff, capped retries, then surface clearly. Don't loop forever.

Python:

Production handler

import httpx
import time

def attempt_checkout(plan_id, base_url, headers):
for attempt in range(3):
response = httpx.post(
f"{base_url}/v1/billing/subscribe",
headers=headers,
json={"plan_id": plan_id},
timeout=30,
)
if response.status_code == 503:
body = response.json()
if body.get("error") == "payment_provider_unavailable":
time.sleep(60 * (attempt + 1))
continue
response.raise_for_status()
return response.json()
raise RuntimeError("Payment provider unavailable after 3 attempts.")

Avoid this error by

  • You can't prevent processor outages — only handle them gracefully.
  • In your UI, show "Payment service temporarily unavailable. Please try again in a few minutes." Don't show "Asterwise is down" — that's misleading and erodes trust.
  • Don't pre-charge or store payment intent on your side and "replay" it later. Always start fresh once the processor is back.
  • Subscribe to status.asterwise.com — we post processor incidents there.