Skip to main content

Security boundaries you can verify

Controlled Stripe access for a sensitive billing handover

A subscription migration needs enough Stripe access to inspect and recreate billing objects, but that access should be purpose-specific, time-limited and separated from customer payment credentials. This page states the controls MoveMRR implements and the boundaries your team still owns.

The direct answer

MoveMRR uses purpose-specific restricted Stripe API keys and validates required permissions. Stored live keys use Supabase Vault and expire inside MoveMRR after 30 days. Live keys are not returned to the browser after storage; account owners must still revoke them in Stripe after the project. MoveMRR does not handle raw card numbers. Eligible payment credentials are copied by Stripe. For sandbox seeding, separate one-shot live-read and test-write keys are passed to the backend executor for that run and are not stored as project keys. These controls reduce exposure; they do not make a migration risk-free or replace key revocation, access review and cutover approval by the account owners.

Product security facts reviewed July 24, 2026

Implemented controls and their exact boundary

Each control answers a different risk. Restricted permissions limit what a key can do, Vault protects a stored secret at rest, expiry limits how long MoveMRR accepts it, and Stripe’s own copy process keeps raw card data out of the MoveMRR workflow.

Purpose-specific Stripe access

MoveMRR uses purpose-specific restricted Stripe API keys and validates required permissions.

Boundary: The required permissions depend on whether the key belongs to the source or destination account. A Restricted Key is still a sensitive credential and must be created, reviewed and revoked by the account owner.

Vault storage and expiry for live keys

Stored live keys use Supabase Vault and expire inside MoveMRR after 30 days. Live keys are not returned to the browser after storage; account owners must still revoke them in Stripe after the project.

Boundary: The MoveMRR expiry controls use inside MoveMRR. It is not a substitute for revoking the key in the Stripe Dashboard after the migration or immediately after suspected exposure.

No raw card-number handling

MoveMRR does not handle raw card numbers. Eligible payment credentials are copied by Stripe.

Boundary: MoveMRR still processes billing object identifiers and migration metadata needed to coordinate the work. Payment-method eligibility and authentication remain governed by Stripe, issuers and applicable regulation.

Separate one-shot keys for sandbox seeding

A sandbox seed run uses a one-shot read-only live key to scan the live account and a separate test-mode key to write into the selected Stripe sandbox. These full secrets are passed to the backend executor for the run and are not persisted as project keys.

Boundary: The run may record the Stripe account ID and a short key prefix for audit context, never the full secret. This exception is separate from the two stored source and destination keys used by a regular migration.

Why Restricted Keys are the normal migration credential

A Stripe secret key can authorize consequential actions. MoveMRR therefore uses purpose-specific Restricted Keys for normal source and destination access and validates required permissions. The source role needs access to inspect the objects that define current billing. The destination role needs the permissions required to recreate the agreed objects. Keeping those roles separate makes the granted capability easier to review.

Least privilege is not a fixed list for every project. Subscription schedules, coupons, tax settings, products, prices or optional webhook recreation can change the required scope. The practical rule is to grant the documented permissions needed by the selected workflow, reject a key that cannot perform the required checks, and avoid unrelated permissions.

  • Use a dedicated key: do not reuse a broad operational key created for another integration.
  • Label the key clearly: make its MoveMRR purpose and source or destination role visible in Stripe.
  • Review and revoke: remove the key in Stripe after reconciliation and application handover are complete.

What Supabase Vault and the 30-day expiry mean

Stored live keys use Supabase Vault. After storage, the live secret is not returned to the browser; the interface receives key status and validation metadata rather than the key value. Internal migration operations request the secret only when they need to call Stripe. Live-key storage is refused if the secure Vault path is unavailable instead of silently falling back to Base64 encoding.

A stored live key receives a MoveMRR expiry after 30 days. Once expired, migration operations reject it and the cleanup path can remove the stored secret. This limit narrows the retention window, but it does not reach into Stripe and revoke the credential there. The account owner remains responsible for revocation, rotation and incident response in Stripe.

How payment credentials stay with Stripe

MoveMRR does not collect or store raw card numbers. Where a migration qualifies, Stripe can copy eligible customer and payment-method data between accounts. The MoveMRR workflow then relates the copied customer and payment-method objects to recreated destination subscriptions. Stripe documents both the eligible data and the objects that Customer Data Copy does not transfer.

This separation does not imply that every payment method will work without follow-up. Unsupported methods, missing default payment methods, issuer declines and Strong Customer Authentication can require remediation or customer action. A dry run and exception report are therefore operational controls, not a guarantee of future payment authorization.

Sandbox seeding is a deliberately separate exception

Sandbox seeding helps reproduce selected live-account structures in Stripe test mode. For a seed run, the operator supplies a one-shot live key with read permissions and a one-shot test key with the writes required in the sandbox. These keys travel to the backend executor as run arguments and are not inserted into the project’s stored Stripe-key records.

The live client is read-only by contract, while all seed writes target a Stripe test-mode account. The service validates key mode and permissions before work begins. Customer synchronization between two prepared sandboxes is a different operation and uses the stored test-mode source and destination keys. Keeping these paths distinct prevents a temporary seeding permission set from becoming the normal live-migration credential.

Security responsibilities that remain with buyer and seller

MoveMRR can enforce controls inside its product, but it cannot decide who in a transaction should authorize access. Buyer and seller should name the owners of the source account, destination account, application, cutover and incident channel. They should agree when keys may be created, who reviews dry-run evidence and who revokes access after the final reconciliation.

Application credentials, webhook signing secrets, local database permissions and staff access are separate from Stripe API-key storage. A complete SaaS handover needs an inventory for each of them. This page makes no claim of a certification, audit opinion or absolute protection against every security event. It describes current product behavior and links to the relevant platform guidance.

A defensible access lifecycle

  1. Define source and destination roles

    Agree which Stripe account is read, which is written, what optional objects are in scope and who approves the access.

  2. Create dedicated Restricted Keys

    Grant the documented permissions for each role, label the keys in Stripe and validate them in MoveMRR.

  3. Test before changing live billing

    Use readiness checks and a dry run to identify missing permissions, mappings and payment-method exceptions.

  4. Reconcile, hand over and revoke

    Verify the destination, update application references, hand over webhook secrets where applicable and revoke migration keys in Stripe.

What these controls do not guarantee

  • Restricted Keys reduce permissions but remain sensitive secrets that can cause impact within their granted scope.
  • MoveMRR’s 30-day expiry prevents later product use; only the Stripe account owner can revoke the key at the Stripe platform level.
  • Vault storage protects stored live secrets, but application security also depends on account access, endpoint security, operational review and incident response.
  • No raw card-number handling does not mean every customer is guaranteed a frictionless future payment after migration.
  • This page does not assert SOC 2, ISO 27001, PCI certification or any other external certification for MoveMRR.

Security questions

Does MoveMRR store Stripe API keys?

For a regular migration, stored live keys use Supabase Vault and expire inside MoveMRR after 30 days. MoveMRR stores key status and account metadata for the workflow, but does not return a stored live secret to the browser. The account owner still revokes the credential in Stripe after the project.

Can I use my normal Stripe secret key?

MoveMRR’s documented approach is a dedicated, purpose-specific Restricted Key with validated permissions. Reusing a broad key expands the potential impact and makes later revocation harder to reason about.

Does MoveMRR receive customers’ card numbers?

No. MoveMRR does not handle raw card numbers. Stripe performs the copy of eligible payment credentials. MoveMRR works with the billing objects, identifiers and mappings required to coordinate subscriptions.

What is different about sandbox seeding keys?

They are separate one-shot credentials for a seed run: a live-read key for scanning and a test-mode write key for the sandbox. They are passed to the backend executor and are not persisted as the project’s regular migration keys.

Does key expiry automatically revoke the key in Stripe?

No. Expiry stops MoveMRR from using the stored key after its retention window. The Stripe account owner should still revoke the Restricted Key in Stripe after reconciliation or immediately if exposure is suspected.

Does this security model guarantee a risk-free migration?

No. These controls reduce specific credential and data-handling risks. A controlled migration still requires correct permissions, dry-run review, stakeholder approval, application handover, reconciliation and a response plan for exceptions.

Primary platform sources

Stripe sources define key and data-copy behavior on the Stripe platform. The Supabase source explains the Vault capability used by MoveMRR. Product-specific statements are dated to the latest factual review shown above.

Treat migration access as a temporary operational capability

Scope each key, validate it, use it only for the agreed workflow, and revoke it in Stripe after the destination and application handover are verified.