Significant-Gravitas/AutoGPT · error · HTTPException

Tier change unavailable for your current billing currency. P

Error message

Tier change unavailable for your current billing currency. Please contact support — the target tier needs to be configured for your currency in Stripe before this change can go through.

What it means

HTTP 422 raised when modifying a subscription schedule fails because phases mix currencies - e.param == 'currency' or 'currency' appears in the message. Typical case: the active subscription was checked out in a non-USD currency (e.g. GBP) but the target tier's Stripe Price is USD-only, so Stripe rejects the schedule; the substring fallback also covers older error shapes where param is 'phases' or absent.

Source

Thrown at autogpt_platform/backend/backend/api/features/v1.py:1264

                e,
            )
            raise HTTPException(
                status_code=402,
                detail=(
                    "No payment method on file. The plan was not changed;"
                    " please add a payment method and try again."
                ),
            )
        # Stripe rejects schedule modify when phases mix currencies, e.g. the
        # active sub was checked out in GBP but the target tier's Price is
        # USD-only. e.param is "currency" on the schedule API but may be
        # "phases" or absent on older error shapes — substring fallback keeps
        # the 422 firing instead of dropping to the generic 502.
        if e.param == "currency" or "currency" in msg_lower:
            logger.warning(
                "Currency mismatch on tier change for user %s: %s", user_id, e
            )
            raise HTTPException(
                status_code=422,
                detail=(
                    "Tier change unavailable for your current billing currency."
                    " Please contact support — the target tier needs to be"
                    " configured for your currency in Stripe before this"
                    " change can go through."
                ),
            )
        logger.exception(
            "Stripe error modifying subscription for user %s: %s", user_id, e
        )
        raise HTTPException(
            status_code=502,
            detail=(
                "Unable to update your subscription right now. "
                "Please try again or contact support."
            ),
        )

View on GitHub (pinned to 9c8bb5550f)

Solutions

  1. Contact support / ops to configure the target tier's price for the user's billing currency in Stripe and the flags
  2. Alternatively cancel and re-checkout in a currency the target tier supports (changes billing immediately)
  3. Operators: audit that every purchasable tier has prices in every currency you allow at checkout
Defensive patterns

Strategy: fallback

Validate before calling

const status = await api.getSubscriptionStatus();
if (status.currency && !tierSupportsCurrency(req.tier, status.currency)) warnUserBeforeSubmit();

Try / catch

try { await api.setSubscription(req); }
catch (e) {
  if (e.status === 422 && /billing currency/.test(e.detail)) showCurrencySupportNotice();
  else throw e;
}

Prevention

When it happens

Trigger: User whose active subscription bills in GBP/EUR requests a tier whose configured LD price exists only in USD (or vice versa); Stripe refuses to build a schedule whose phases change currency.

Common situations: Multi-currency rollout gaps: prices configured for some currencies only; users who originally checked out via a localized currency; a price flag pointing at the wrong currency's price ID.

Related errors


AI-assisted analysis of Significant-Gravitas/AutoGPT@9c8bb5550f (2026-08-14). Data as JSON: /api/errors/7cf567bbb94872e8. Report an issue: GitHub.