---
title: "Create a membership plan: price per month or year, joining fee, included sessions with a carry-over cap, member discounts, priority booking, minimum term, notice and pause rules"
method: POST
path: "/api/v1/membership-plans"
---

# Create a membership plan: price per month or year, joining fee, included sessions with a carry-over cap, member discounts, priority booking, minimum term, notice and pause rules

`POST /api/v1/membership-plans`

## Request

- Base URL: `http://127.0.0.1:4310`
- URL: `http://127.0.0.1:4310/api/v1/membership-plans`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `sfb_session`

## Request body

- object
  - `name` string, required
  - `description` string
  - `billing_interval` 'month' | 'year', required
  - `price_minor` integer, required: VAT-inclusive price per period in minor units
  - `currency` string
  - `tax_rate_bps` integer
  - `signup_fee_minor` integer
  - `included_sessions` integer
  - `session_scope` 'services' | 'category' | 'any'
  - `session_service_ids` string[]
  - `session_category` string
  - `rollover_cap` integer
  - `service_discount_bps` integer: Basis points off treatments (1500 = 15%)
  - `product_discount_bps` integer
  - `priority_days` integer: Extra days members can book ahead
  - `min_term_periods` integer
  - `cancel_notice_days` integer
  - `allow_immediate_cancel` boolean
  - `max_pauses` integer: Pauses allowed per 12 months
  - `max_pause_days` integer
  - `terms` string
  - `online` boolean
  - `active` boolean
  - `sort` integer
  - `expected_version` integer

## Response `201`

OK

- object

## Other responses

- `400`: Validation error
- `401`: Unauthenticated
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict or invalid state

---

[API](https://skmtc.dev/scalingfirm/apis/tsf-booking-api.md) · [All operations](https://skmtc.dev/scalingfirm/apis/tsf-booking-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scalingfirm/apis/tsf-booking-api/revisions/81704199cd37?raw)
