---
title: "Create billing portal session"
method: POST
path: "/api/billing/create-portal-session"
---

# Create billing portal session

`POST /api/billing/create-portal-session`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/billing/create-portal-session`
- Auth: HTTP bearer

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Creates a link to the Stripe customer portal for your workspace. The link opens a hosted page: open it in a browser, and the workspace owner updates the card, downloads invoices, or manages the plan there. Nothing in the portal can be completed through the API. Only the workspace owner can create the link.

When the person leaves the portal, Stripe sends them back to the Base44 billing page.

Set `flow_type` to choose what the portal offers. A workspace billed through Wix, or one still on a free migration trial, always gets `manage_no_cancel` unless you ask for `payment_method_update`. Manage a Wix-billed plan with [Change Wix plan](/api-reference/change-wix-plan), and its card with [Create payment method update session](/api-reference/create-payment-method-update-session).

The base rate limit is 20 requests per hour per user. See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

## Query parameters

- `flow_type` string: What the portal offers. `default` opens the full portal, `payment_method_update` goes straight to updating the card, and `manage_no_cancel` hides cancelling and changing the plan. Any other value acts like `default`.

## Response `200`

A link to the Stripe customer portal.

- BillingPageUrl: A hosted billing page for a person to open.
  - `url` string, required: Link to a hosted page. Open it in a browser for a person to finish there. Some links work only once or expire, so open it right away and don't store it.

## Other responses

- `400`: The workspace has no Stripe billing account to manage.
- `401`: Missing or invalid credentials. A read-only token gets this response too.
- `403`: You aren't the workspace owner, or a payment dispute is open on the workspace.
- `429`: Rate limit exceeded. The base rate limit is 20 requests per hour per user. See [Rate limits](/developers/references/apps-api/get-started/rate-limits) for the multiplier your plan gets.

## Changes

> 66 revisions in range; 1 not diffed.

- **2026-10-26** `395a6758864a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/billing/create-portal-session/post.md)

---

[API](https://skmtc.dev/adexad/apis/base44-app-management-api.md) - [All operations](https://skmtc.dev/adexad/apis/base44-app-management-api/llms.txt) - [OpenAPI document](https://skmtc.dev/adexad/apis/base44-app-management-api/revisions/d877a932dc19?raw)
