---
title: "Create Portal"
method: POST
path: "/billing/portal"
tags: ["billing"]
---

# Create Portal

`POST /billing/portal`

## Request

- Base URL: `https://api.framesail.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.framesail.com/billing/portal`
- Auth: HTTP bearer

Create a Stripe Billing Portal session — the single manage flow for
plan changes, cancellations, payment-method updates, and invoice history.

With req.plan_id, the session opens on that plan's confirm-upgrade screen
(amount due today + Confirm) instead of the portal home.

## Request body

- PortalRequest
  - `plan_id` 'creator_monthly' | 'creator_quarterly' | 'pro_monthly' | 'pro_quarterly' | 'studio_monthly' | 'studio_quarterly' | 'scale_monthly' | 'scale_quarterly', nullable

## Response `200`

Successful Response

- PortalResponse
  - `portal_url` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/framesail/apis/framesail-api.md) · [All operations](https://skmtc.dev/framesail/apis/framesail-api/llms.txt) · [OpenAPI document](https://skmtc.dev/framesail/apis/framesail-api/revisions/12602eae0820?raw)
