Subscriptions via DODO Payments.
Plans upgrade an organization's quota. Billing runs through DODO Payments — start a hosted checkout, manage card/invoices in the portal, cancel at period end. These routes are session-authenticated (dashboard actions), not Bearer-token. Full schema in the API reference.
Plans
$ curl https://login.ollastack.com/api/billing/plans -H "Authorization: Bearer <token>" {"provider":"dodo","enabled":true,"plans":[{"name":"solo","label":"Solo","quota":2000,"priceLabel":"$9 / month"}, ...]}
Subscribe
Returns a hosted checkout URL — redirect the user to it. On payment, a signed DODO webhook upgrades the org's plan.
$ curl -X POST https://login.ollastack.com/api/billing/dodo/subscribe \ -H "Cookie: ollastack_session=…" -H "Content-Type: application/json" \ -d '{ "plan": "solo", "orgId": "<orgId>" }' {"success":true,"data":{"url":"https://checkout.dodopayments.com/session/…"}}
Manage / invoices
$ curl -X POST https://login.ollastack.com/api/billing/dodo/portal \ -H "Cookie: ollastack_session=…" -H "Content-Type: application/json" \ -d '{ "orgId": "<orgId>" }' {"success":true,"data":{"link":"https://…"}}
Cancel
Cancels at period end — the paid plan stays active through the cycle you paid for, then drops to free.
$ curl -X POST https://login.ollastack.com/api/billing/dodo/cancel \ -H "Cookie: ollastack_session=…" -H "Content-Type: application/json" \ -d '{ "orgId": "<orgId>" }'