---
title: "Create MembershipType"
method: POST
path: "/customers/membership-types"
tags: ["MembershipTypes"]
---

# Create MembershipType

`POST /customers/membership-types`

Use this endpoint to create a new `MembershipType`.

## Request body

- object
  - `brand_id` string, uuid, required — Identifier of the brand that owns this membership type. Membership types are scoped per brand so customers can be enrolled into the same tier across every site that shares the brand.
  - `name` string, required — Display name of the membership tier, shown to customers on the storefront, in the membership area, and on email receipts. 1-120 characters and must not contain HTML.
  - `description` string, nullable — Marketing description of the membership tier, shown on the storefront purchase page. Use it to summarise the benefits of joining. Plain text, up to 1000 characters.
  - `terms` string, nullable — Terms and conditions of the membership type
  - `private` boolean — Whether this `MembershipType` is private or not. When a `MembershipType` is private, it won't be shown to users on the site's shop frontend. This field is deprecated and has been superceded by `visibility`.
  - `visibility` 'public' | 'private' | 'link_only' — The visibility of the `MembershipType` on the site's shop frontend.
  - `offline_payments` boolean — Whether this MembershipType takes "offline" payments. If true, the monthly fee won't automatically be collected using Stripe, which can be useful if a different provider is used for collecting direct debits. You'll need to manually manage the membership status.
  - `disable_confirmation_email` boolean — Whether to disable sending the confirmation email when a membership is confirmed.
  - `minimum_start_date` string, date-time, nullable — The minimum start date for a membership of this type.
  - `min_members` integer — The minimum number of members required to create a membership of this type
  - `max_members` integer — The maximum number of members allowed to create a membership of this type
  - `revenue_schedule` 'FREQ=DAILY' | 'FREQ=WEEKLY' | 'FREQ=MONTHLY;BYMONTHDAY=1' — The revenue schedule for the membership type.
  - `initial_rate` object, required — The initial rate to create for the membership type.
    - `processors` string[] — The payment processors that can be used to process payments for this rate.
    - `amount` integer, required — The amount to charge for the initial rate, as an integer of the smallest unit of the currency
    - `currency` string, required — The currency of the initial rate
    - `billing_frequency` 'P1M' | 'P3M' | 'P6M' | 'P1Y', required — The billing frequency of the initial rate in ISO 8601 duration format.
    - `default_duration` 'P1M' | 'P3M' | 'P6M' | 'P1Y' — The default duration memberships of this rate will be created with, in ISO 8601 duration format.

## Response `201`

The `MembershipType` was successfully retrieved

- object
  - `data` MembershipType, required
    - `id` string, uuid, required — The ID of the membership type
    - `name` string, required — The name of the membership type
    - `description` string, nullable, required — The description of the membership type
    - `terms` string, nullable, required — Terms and conditions of the membership type
    - `brand_id` string, uuid, required — The ID of the brand this type is linked to
    - `offline_payments` boolean, required — Whether this MembershipType takes "offline" payments. If true, the monthly fee won't automatically be collected using Stripe, which can be useful if a different provider is used for collecting direct debits. You'll need to manually manage the membership status.
    - `disable_confirmation_email` boolean, required — Whether to disable sending the confirmation email when a membership is confirmed.
    - `private` boolean, required — Whether this `MembershipType` is private or not. When a `MembershipType` is private, it won't be shown to users on the site's shop frontend. This field is deprecated and has been superceded by `visibility`.
    - `visibility` 'public' | 'private' | 'link_only' — The visibility of the `MembershipType` on the site's shop frontend.
    - `minimum_start_date` string, date-time, nullable, required — The minimum start date for a membership of this type.
    - `min_members` integer, required — The minimum number of members required to create a membership of this type
    - `max_members` integer, required — The maximum number of members allowed to create a membership of this type
    - `rates` MembershipRate[], required — The public MembershipRates for this type, or if a `MembershipSignupToken` was passed, the rate linked to that.
      - `id` string, uuid, required — The ID of the membership rate
      - `membership_type_id` string, uuid, required — The ID of the `MembershipType` which this rate belongs to
      - `name` string, required — The name of the membership rate
      - `currency` string, required — The currency which all monetary values of this rate are in, uppercase, in the ISO4217 format
      - `price` number, required — The price of the rate as an integer of the smallest unit eg pence. This is charged to the customer every billing period according to the `billing_frequency`
      - `joining_fee` number, required — The price of the joining fee as an integer of the smallest unit eg pence.
      - `billing_frequency` string, required — The frequency that this membership is billed. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations
      - `processors` string[], required
      - `default_duration` string, nullable, required — The default duration of the membership. This is used when a customer signs themselves up for a membership. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations
      - `notice_period` 'P7D' | 'P14D' | 'P1M' | 'P3M' | 'P6M' | 'P1Y' | 'null', nullable, required — How much notice a customer must give to cancel a membership on this rate. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations When null, no notice is required.
      - `private` boolean, required — Whether this `MembershipRate` is private. If public, it will be selectable on the self-signup flow.
      - `created_at` string, date-time, required — The datetime which the rate was created
      - `updated_at` string, date-time, required — The datetime which the membership was last updated
    - `revenue_schedule` string, nullable, required — The schedule that revenues for this membership should be created, as an [RRULE](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html) string
    - `created_at` string, date-time, required — The datetime which the membership type was created
    - `updated_at` string, date-time, required — The datetime which the membership type was last updated
    - `deleted_at` string, date-time, nullable, required — The datetime which the membership type was archived, or null if it isn't archived.

## Other responses

- `401` — The user is unauthenticated
- `403` — The authenticated user does not have permission.
- `422` — The request didn't pass validation

---

[API](https://skmtc.dev/try/apis/trybe-api.md) · [All operations](https://skmtc.dev/try/apis/trybe-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/try/trybe-api/revisions/f37f92702da5/schema)
