# billing.create_portal_session

Open the self-service billing portal for an organization

POST /organizations/{organizationSlug}/billing/portal-session — answers 200

MCP tool: billing_create_portal_session

Scope: billing:write. Kind: write. Acts on: organization.

Answers with a URL on the payment provider’s own customer portal, where an owner changes the seat count, updates the card or cancels. A person has to open it; nothing changes until they act there, and the seat count follows once the change clears. Owners only, and an organization with no subscription yet is refused with 409 — start one with `billing.create_checkout_session`. A **sandbox** credential never reaches the payment provider; it gets a URL on our own documentation site describing what the live call would have done. A sandbox organization has no subscription state to be in, so the 409 above never fires there — only the owners-only check does. Do not write a test that expects it in sandbox.

Path and query parameters: organizationSlug

Example — Send an owner to manage their subscription

Request:

```json
{"organizationSlug":"northside-career-center"}
```

Response:

```json
{
  "url": "https://billing.stripe.com/p/session/live_a1b2c3"
}
```