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

# Create Portal Session

`POST /v1/billing/portal-session`

## Request

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

Open the Stripe Billing Portal for the caller's organization.

Org-admin only, via org_api's require_org_admin — billing is an admin
surface, and there must be exactly one definition of "org admin."

Every lookup below is keyed on `admin["organization_id"]`, never on the
caller's uid. The user-keyed billing query is `WHERE ou.user_id = %s
LIMIT 1` with no ORDER BY, so for a user with two membership rows it can
return a different org than the one require_org_admin authorised — which
would mean provisioning one org and opening the portal on another org's
Stripe customer.

## Response `200`

Successful Response

- PortalSessionResponse
  - `url` string, required

---

[API](https://skmtc.dev/evidenso/apis/persona-rag-api.md) - [All operations](https://skmtc.dev/evidenso/apis/persona-rag-api/llms.txt) - [OpenAPI document](https://skmtc.dev/evidenso/apis/persona-rag-api/revisions/86408c178d4f?raw)
