---
title: "Open the billing portal for a subscribed key (key in body)"
method: POST
path: "/v1/billing/portal"
tags: ["Keys & Billing"]
---

# Open the billing portal for a subscribed key (key in body)

`POST /v1/billing/portal`

## Request

- Base URL: `https://api.insumermodel.com`
- URL: `https://api.insumermodel.com/v1/billing/portal`
- Auth: none required

Returns a Stripe Billing Portal URL where a subscriber manages or cancels their subscription. Only keys with an active card subscription qualify (400 otherwise). Rate-limited per client address. **Response envelope note**: standalone endpoint — flat `{success, url}`.

## Request body

- object
  - `key` string, required: The full insr_live_ key (50 chars).

## Response `200`

Portal session created

- object
  - `success` boolean
  - `url` string

## Other responses

- `400`: Invalid key format, or key has no card subscription
- `403`: Key deactivated
- `404`: Key not found
- `405`: Method not allowed (only POST supported)
- `429`: Too many requests — try again in a few minutes
- `500`: Unexpected server error. Safe to retry; no credits are charged on a 500. Router endpoints return the standard error envelope; standalone endpoints (the ones whose 200 is a flat object) return a flat {"error": "..."} object.

---

[API](https://skmtc.dev/insumermodel/apis/insumerapi.md) · [All operations](https://skmtc.dev/insumermodel/apis/insumerapi/llms.txt) · [OpenAPI document](https://skmtc.dev/insumermodel/apis/insumerapi/revisions/91f56fe9e3d8?raw)
