Skip to content

Manage Billing

Your subscription is managed entirely on Stripe's own hosted Checkout and Billing Portal pages. The Tenant App shows estimates and durable Plan Change progress, but it doesn't collect payment details. Two Surfaces explains why: billing is a control-plane fact about your tenant, not something your own Stack has any part in.

Choose a Plan

Your hosted subscription is one of three Stack Plans. Monthly prices are in USD before applicable tax. Plans have the same price in every Home Region. Signup currently offers the EU Home Region only:

PlanPriceHosted resourcesRun CapReserve CapWatched Projects Cap
Standard$40/month2 shared vCPU, 4 GB memory, 40 GB storage113
Plus$50/month4 shared vCPU, 8 GB memory, 80 GB storage316
Pro$60/month8 shared vCPU, 16 GB memory, 160 GB storage5212

Every card-required 14-day trial starts on Standard. You can choose another Plan only after Stripe reports the subscription as active. Zozo doesn't queue a change during a trial.

Founding Price Lock

If you complete your first Zozo subscription before Open Signup, your Founding Price Lock keeps that Plan's monthly list price while the subscription remains continuous and your Stack remains on that Plan. Receiving an invite, creating an account, or starting Checkout isn't enough to qualify. The completed subscription is the boundary, whether you joined as a design partner, through a rollout wave, or by another invitation.

A Plan Change ends the lock

Confirming a Plan Change accepts the destination Plan's displayed price and ends your Founding Price Lock. Returning to the original Plan later doesn't restore its founding price. Cancellation also ends the lock, so a later subscription starts at the prices then offered.

The lock covers the monthly Plan price. It doesn't cover tax, separately metered runtime-provider usage, or future changes to a Plan's capacity and quotas.

The hosted subscription covers your Stack. Which Credential kind you connect (see Connect a Personal Subscription Credential and Understanding Credentials) changes what else you pay:

  • A personal subscription credential (an OAuth token or an uploaded auth file) adds no separate inference cost. It spends a plan you're already paying Anthropic or OpenAI for directly, outside of Zozo entirely. This is the recommended path for a solo tenant running the harness against their own money.
  • A vendor API key meters inference usage and bills it separately, vendor-side, never through this Stripe subscription. That metering is the right shape for a Billed tenant passing the cost straight through to a client, which is why it stays the sanctioned default for that case, but it means your total cost includes that metered usage.

We're not publishing a number or a range for what that metered usage tends to cost. No measured figure exists yet for us to cite honestly, so we'd rather say the shape plainly (hosted Plan, plus metered usage only if you choose the API-key path) than invent one.

Both actions below need your control-plane session. It's the same sessionToken your GitHub sign-in returned (see Quickstart), usable as Authorization: Bearer <sessionToken>, or your browser's session cookie if you're already signed in there.

Start a subscription

Before your first Checkout, you need a tenant slug locked in. It's the permanent <slug>.zozostacks.dev name your Stack will be addressed at:

POST /v1/tenant/slug
{"slug": "your-chosen-slug"}

Then start Checkout:

POST /v1/billing/checkout

The response is {"url": "https://checkout.stripe.com/..."}. Open it in your browser to complete a card-required trial signup on Stripe's own page. Once Stripe confirms the subscription, your tenant moves to the active state on the control plane's own next check.

Change your Stack Plan

An authenticated tenant administrator can compare every Stack Plan in Account & Billing and select Preview Change. Confirmation shows both Plans and their capacity, quotas, monthly prices, Stripe's estimated next invoice and adjustment, any tax or discount Stripe returned, and the preserved billing-cycle date.

The estimate includes Stripe's current discounts and tax estimate. The exact same-cycle proration is calculated when the new capacity is healthy. A move to a higher Plan adds a charge to your next regular invoice; a move to a lower Plan adds a credit. The billing anchor stays fixed, and an invoice credit is never paid as a cash refund.

If there's no capacity for the requested Plan in your Stack's location right now, confirming still succeeds. The change queues instead of starting immediately, and starts on its own once capacity opens up anywhere in your Home Region, preferring your Stack's current location. Landing somewhere else in your Home Region changes your Stack's IP address; that's covered by the same completion email described below, never a separate notice, and needs no action from you. Billing stays untouched while it waits: Stripe's exact adjustment is still calculated only once the new capacity is healthy, the same as an immediate change.

If you change your mind about the target Plan while a change is still queued, confirming a new one replaces it: your latest request is always the one that's authoritative, whether it queues again or starts immediately. The replaced request stays in your history, marked as superseded, so nothing about it disappears silently.

If capacity never opens up, a queued change expires automatically after 7 days. Your previous Plan and billing stay untouched, and you can submit a new request any time.

Let active work finish

A Plan Change temporarily pauses admission of new work and waits for active work to finish. It never stops active work. You can cancel a Plan Change at any point while it's waiting for capacity or for active work to finish; final backup preparation closes the cancellation window. If the change rolls back before billing commits, Zozo reopens admission on your previous Plan and leaves billing unchanged.

Confirmation creates one durable Plan Change. Its status survives navigation and sign-in, progressing through Waiting for Capacity (only when the requested Plan queued on capacity), Waiting for Work, Preparing, Switching, Verifying, and a durable outcome, or Superseded if a later request replaced it while it was still queued. A queued change that's still waiting after 7 days reaches a durable outcome too: it expires, distinct from a rollback, with your previous Plan and billing untouched. Stripe recalculates the exact adjustment only after the replacement is healthy, so the final amount can differ from the earlier estimate. If the move can't complete before that billing commit, Zozo restores the previous Plan and leaves billing unchanged.

Account & Billing retains every outcome after the live progress view is gone. Each entry shows the current and requested Stack Plans, timestamps, safe status history, an actionable recovery message, and the exact final next-invoice adjustment when billing committed. Provider identifiers, credentials, storage locators, and internal operator identities never appear in this tenant view or its audit export. The tenant administrator receives one email when the change completes, rolls back, or expires; reconciler retries don't repeat a confirmed delivery.

Your Durable Stack State and Credentials move to the new capacity. Workspaces and runtime-native session caches are rebuildable state local to one instance, so they're recreated when needed rather than migrated.

The controls remain hidden unless the Plan catalog, Stripe integration, replacement path, reconciliation loop, and published customer contract are all release-ready. Trials, overdue billing, scheduled cancellation, an unchanged Plan, and another active infrastructure operation produce a precise refusal in the confirmation surface. Unavailable capacity doesn't refuse; it queues, as described above.

Update your card or cancel your subscription

In a browser, this is the Account & billing link in the top bar of the sign-in app (and below the status block on the post-Checkout welcome page). It opens your account settings, whose Manage Billing button is the Billing Portal. Cancelling is always self-serve there; you never need to email anyone to cancel.

The same thing directly:

POST /v1/billing/portal

The response is {"url": "https://billing.stripe.com/..."}. This is Stripe's Billing Portal, where you can update your payment method or cancel your subscription. Canceling here is what starts Close Your Account. Nothing about canceling tears anything down immediately.

Docs for Zozo: a coding-agent harness.