Transferring a personal subscription to an org
When the transfer prompt appears, what actually moves, and what you can expect afterwards — especially: no card re-entry, no new Checkout.
The problem this solves
You signed up for Integraph as an individual, subscribed to a few tools personally during a trial, and now your company has agreed to pay. You create a team org to represent the company, and you want the existing subscription to move onto the org — without cancelling and resubscribing, re-entering the card, or losing trial progress in a way that looks bad on an invoice.
The transfer flow does exactly that, in one click, from the dialog that appears right after you create a team org.
When the prompt appears
Immediately after you create a team org with the Create Organization dialog, the app checks whether your personal Stripe customer has any transferable entitlements. If any exist, a follow-up dialog appears asking whether you want to move them to the new org.
“Transferable” means two things simultaneously:
- The entitlement is paid (not a free grant or a compliance grant), and
- Your personal org has a Stripe customer ID (i.e., you actually went through Checkout at some point).
Free grants and compliance grants are not transferable because they don’t correspond to a Stripe item. The dialog will not appear at all if neither condition is met.
The prompt is one-shot: it only appears right after org creation. If you dismiss it and change your mind later, you will need to manage the transition manually — cancel personally, then subscribe the org. The automated flow is only available in that first moment.
What actually happens on transfer
This is the sequence the backend runs when you confirm:
- Validate — confirm you’re an owner of the target org and that your personal org has an active or trialing subscription. Any other state is a 400.
- Ensure org customer — create a Stripe customer for the target org if one doesn’t exist yet.
- Detach payment method — detach your saved card from the personal Stripe customer.
- Re-attach to org customer — attach the same card to the org Stripe customer and mark it the default invoice payment method.
- Create org subscription — create a new subscription on the org customer with the same line items (tool slugs, access tiers, quantities) your personal subscription had. Note: no trial is applied on the new org subscription — trials are a per-customer privilege and the org is a new customer from Stripe’s perspective.
- Cancel personal subscription — cancel the personal subscription immediately with
Prorate = true, which credits the unused portion of the current period back to the personal customer. - Return success — the endpoint responds, and the webhook path handles entitlement reprovisioning.
What you do NOT have to do
- No card re-entry. The same card moves with the subscription. Stripe’s detach-then-attach API was built for exactly this.
- No Stripe Checkout. The transfer uses the direct subscription API, not Checkout. You will not see the Checkout iframe during a transfer — if you do, something upstream has decided this is a new subscription rather than a transfer, and you should check the troubleshooting page.
- No SetupIntent. Because the card is already attached and validated, no new SetupIntent is required.
- No manual entitlement reassignment. The personal entitlements are removed via the
customer.subscription.deletedwebhook and the org entitlements are added via thecustomer.subscription.createdwebhook. Both run asynchronously after the endpoint returns, usually within a few seconds.
What you lose
- Any remaining trial days. The new org subscription is billed from day one. If you were 4 days into a 14-day trial, those 4 days are forfeited because the 10 remaining trial days don’t transfer. The proration credit on the personal cancellation does return the unused trial portion as a customer balance, though, so you’re not double-charged.
- The one-per-customer trial eligibility — on the personal customer side. You’ve now had a subscription on the personal customer, so if you later cancel the org and try to resubscribe personally, you will not get another trial.
Rollback and failure modes
Step 3 (detach) and step 4 (re-attach) are the most dangerous pair in the sequence because a failure between them would leave the payment method orphaned — detached from the personal customer but not yet attached to the org customer. The backend has an explicit rollback: if any step from 4 onwards fails, it tries to re-attach the card to the personal customer. If that rollback also fails, it logs at LogCritical level with an explicit “PM is orphaned. Manual intervention required.” message — that log line is the single canary you should search for if a transfer appears to go wrong.
In practice the failure rate is near zero (Stripe’s detach/attach rarely fails), but knowing the rollback exists and what it looks like in logs is useful when diagnosing something that did go wrong.
After the transfer
The transfer endpoint returns success as soon as step 7 runs. The entitlement reprovisioning then happens via webhook — usually within ~3 seconds. The client billing tab polls again after a short delay to catch this, so you’ll see the UI update from “transferring…” to the new subscribed state automatically. You don’t need to refresh manually.
Once the webhooks have landed, you can verify the transfer worked by:
- Account Settings → Billing — your personal subscription is gone. Any entitlements granted by the new org show as read-only with a “Manage in [New Org] Settings” link.
- Organization Settings → Billing — the new org has a subscription with the same items you had personally, and the per-member tree shows yourself as the only member with those tiers (because you created the org and haven’t invited anyone yet).
From here the org billing flows work exactly as described in Managing org entitlements.