Limits and unsupported cases

Limits and unsupported cases

Review RevBridge migration limits and unsupported Stripe billing cases that should appear as dry-run blockers.

Updated Jul 5, 2026

RevBridge should block subscriptions it cannot migrate safely.

Unsupported cases are normal in acquisition billing data. The goal is to find them before execution, not during a live migration.

Unsupported subscription shapes

Dry-run blockers can include:

  • No billing-relevant source subscriptions to evaluate.
  • Stripe Test Clock subscriptions in a broad account scan. Stripe's list API requires filtering by a specific Test Clock or customer to return them, and RevBridge v1 does not ask for a Test Clock ID.
  • Destination customers that already have non-terminal subscriptions outside the current RevBridge migration plan. Stripe Customer Data Copy should produce customer shells, not buyer-side subscriptions.
  • Multi-item subscriptions whose items bill on different intervals/interval counts or report different current_period_end timestamps. Multi-item subscriptions are supported when every item shares one billing interval and one period end.
  • Subscription schedules and Stripe billing schedules.
  • Paused subscriptions.
  • Subscription statuses outside active and valid trialing, including incomplete, past_due, and unpaid.
  • Unsupported trial settings, including unknown missing-payment-method behavior values.
  • Stripe Trial Offers on subscription items.
  • Manual invoice collection.
  • Custom cancel_at timestamps earlier than the next renewal. A scheduled cancellation at or beyond the next renewal is supported and mirrored exactly onto the destination subscription.
  • Billing thresholds.
  • Pending subscription updates or pending invoice-item intervals. A pending_setup_intent alone does not block; Stripe attaches one to ordinary shapes such as no-card trials and zero-amount subscriptions, and RevBridge binds the buyer-side payment instrument explicitly regardless.
  • Billing cycle anchor config.
  • Outstanding latest invoice balances.
  • Non-zero draft/open/uncollectible customer invoices in either Stripe account.
  • Pending source invoice items on the customer or subscription.
  • Pending destination invoice items on the customer or recovered destination subscription.
  • Subscription presentment details or adaptive-presentment currency state.
  • Unknown billing modes or flexible billing configuration fields RevBridge does not yet preserve. Classic and flexible billing modes are both supported; the destination mirrors the source mode and its proration_discounts setting.
  • Connect transfer, application-fee, or on-behalf-of settings.
  • Custom subscription payment settings, including non-card payment method types, payment method options, non-off save-default behavior, or non-empty future payment setting fields RevBridge does not yet preserve. An explicit card-only payment_method_types is allowed because it matches what RevBridge pins on every destination subscription.
  • Custom subscription invoice settings.
  • Customer-level invoice rendering settings.
  • Missing current period end.
  • Destination subscription already migrated in an unsafe way.

Unsupported price shapes

Dry-run blockers can include:

  • Metered prices.
  • Recurring intervals outside Stripe's documented day, week, month, or year values. All documented intervals and interval counts are supported.
  • Tiered price structures.
  • Custom unit amounts.
  • Transform quantity behavior.
  • Multi-currency prices with currency_options.
  • Missing recurring price data.

Unsupported discount or tax cases

Dry-run blockers can include:

  • Promotion codes.
  • Item-level discounts.
  • Customer-level discounts in either Stripe account.
  • Non-zero customer balance, invoice credit balance, or cash balance in either Stripe account.
  • Customer tax settings or tax IDs in either Stripe account. Explicit price tax_behavior is supported: clones preserve it verbatim and destination subscriptions always disable automatic tax.
  • Customer-level invoice rendering settings in either Stripe account.
  • Multiple discounts.
  • Product-scoped coupons.
  • Repeating coupons whose remaining discount window cannot be reproduced by any whole-month clone duration (common on weekly and daily intervals). Repeating coupons with a matchable window are carried with a remaining-months clone; windows that end before the next renewal migrate without the coupon, with a warning.
  • Stripe Tax, default tax rates, and item tax rates.

Unsupported payment method cases

Dry-run blockers can include:

  • Destination customer has no payment method for a recurring subscription that can collect a future non-zero invoice.
  • Payment method mapping is missing.
  • Payment method mapping is ambiguous.
  • Non-card payment instruments, such as bank debits or wallets, are unsupported in v1.
  • Source customer has no usable payment method.

Copied legacy card/source IDs are supported when RevBridge can fingerprint-match the card to exactly one destination card instrument. In that case the destination subscription is created with an explicit default_source. If both a copied legacy source and a modern pm_... PaymentMethod match the same source card fingerprint, RevBridge blocks the subscription as ambiguous instead of guessing which buyer-side instrument Stripe should charge.

True active trials with no source payment method are a warning only when the mapped destination customer has at least one card instrument for operator review. Destination customers with zero cards are blocked when renewal can collect a non-zero amount because that would require a buyer-side payment instrument. Provably non-collecting recurring subscriptions, such as price 0, quantity 0, or a supported forever coupon that fully discounts the subtotal, do not require payment binding.

Resolve before execution

Do not treat blockers as minor warnings. A blocked subscription needs remediation or a documented manual exception path.