Billing

Billing portal

Stripe-hosted self-service portal for managing your Dock subscription. Update card, change plan, download invoices, cancel, all without filing a support ticket.

Opening the portal

Click Manage billing at /settings?tab=billing. That opens the portal in a new tab, signed in as your org. Free-plan orgs see "Add a card" instead, same flow, different label.

Programmatically:

  • POST /api/billing/portal returns a single-use URL valid for 24 hours.
  • MCP: open_billing_portal tool. Same payload, returns the URL.

What you can do in the portal

  • Update payment method: change card, replace card on file, set default.
  • Change plan: switch between Free, Pro, Scale. Pro-rated to the day.
  • Download invoices: every invoice as PDF, back to org creation.
  • Update billing email: receipts go to a different address than the org owner's.
  • Update tax info: VAT IDs, addresses, etc.
  • Cancel subscription: drops to Free at the end of the current billing period.

Who can open the portal

Org owners + admins. Plain members get a 403 (and a friendly "ask your admin" explainer).

Security model

Dock never stores your card. Stripe handles all PCI. Our backend only sees masked card brand + last 4 + expiration date, enough to display in the dashboard, not enough to charge. The portal session is a Stripe-signed redirect with a 24-hour TTL.

Frequently asked questions

How do I open the Dock Stripe billing portal?
Settings → Billing → Open billing portal. Or POST `/api/billing/portal` from an agent to get a portal URL programmatically. Returns a Stripe-signed redirect with 24-hour TTL.
What can I do in Dock's Stripe billing portal?
Update payment method, view + download every past invoice, change billing email, update billing address + tax ID, cancel subscription. The portal is the canonical surface for any operation that affects future charges.
Why does Dock send me to Stripe's portal instead of building its own?
Stripe handles PCI compliance, 3D Secure / SCA flows, regional payment methods, fraud detection, and tax. Building it ourselves would be a security + regulatory liability without adding user value. The portal stays current as Stripe ships features.
How long does the Dock billing portal session stay valid?
24 hours. The session token is single-use; once you leave the portal, you need a fresh URL. Each portal session is scoped to your org so you can't accidentally view another org's billing details.
Can my AI agent open Dock's billing portal?
Yes. POST `/api/billing/portal` returns a portal URL. The agent surfaces the URL to its user; the user clicks and lands in Stripe. Useful for letting the agent guide users through bill management without the agent itself touching payment data.
Does Dock store my Stripe portal session?
No. Each call to `/api/billing/portal` mints a fresh single-use URL via Stripe's API. Dock stores only the Stripe customer id; the portal session is ephemeral and Stripe-signed.
Can I customize the Dock Stripe portal?
Limited customization at the org-owner level: enabled feature set (cancel, payment-method update, etc.) is configured at Dock's account level. Branding (logo, colors) reflects Dock's account.
What if I can't access the Dock Stripe billing portal?
The portal is owner-only by default. Org admins can also access (Settings → Billing visible to admin role). For shared access without granting admin, set the org's billing email to a finance shared inbox; receipts + portal links land there automatically.
Does cancelling in the Dock Stripe portal delete my data?
No. Cancelling drops the subscription (you revert to Free at period-end). All workspaces, rows, doc bodies, members stay accessible (read-only past Free caps for over-cap workspaces). Re-subscribe any time to restore full Pro/Scale access.
How is Dock's billing portal different from Settings → Billing in the dashboard?
Dashboard Settings → Billing shows your current plan + caps + usage. The Stripe portal handles money operations (cards, invoices, cancel). Both are accessible from the same Settings tab; the portal is one click away when you need it.
Updated