---
title: "Create Plan"
method: POST
path: "/v5/plans"
tags: ["Plans"]
---

# Create Plan

`POST /v5/plans`

Create a new recurring payment plan. Plans can be used to define recurring billing schedules that subscriptions can be associated with.

## Request body

- union
  - object
    - `plan_id` string, required — The unique identifier for the plan
    - `plan_name` string, required — The display name of the plan
    - `plan_amount` number, required — The plan amount to be charged each billing cycle. Format: `x.xx`
    - `plan_payments` integer, required — The number of payments before the recurring plan is complete. Use '0' for until canceled
    - `start_date` string — The first day that the customer will be charged. Format: `YYYYMMDD`
    - `month_frequency` integer, required — How often, in months, to charge the customer.
    - `day_of_month` integer, required — The day of the month that the customer will be charged. For months without 29, 30, or 31 days, the charge will be on the last day.
  - object
    - `plan_id` string, required — The unique identifier for the plan
    - `plan_name` string, required — The display name of the plan
    - `plan_amount` number, required — The plan amount to be charged each billing cycle. Format: `x.xx`
    - `plan_payments` integer, required — The number of payments before the recurring plan is complete. Use '0' for until canceled
    - `start_date` string — The first day that the customer will be charged. Format: `YYYYMMDD`
    - `day_frequency` integer, required — How often, in days, to charge the customer.

## Response `200`

Success

- PlanResponse — Plan response matching PlanRestSerializer structure
  - `object` 'plan', required — Resource type identifier
  - `id` string, required — Plan ID (SKU)
  - `plan_name` string — Plan name
  - `plan_amount` string — Plan amount
  - `plan_payments` string — Number of payments (0 = until canceled)
  - `day_frequency` string — Day frequency (0 if not applicable, empty if not set)
  - `month_frequency` string — Month frequency (0 if not applicable, empty if not set)
  - `day_of_month` string — Day of month (empty if not applicable)

## Other responses

- `400` — Bad Request - Validation Error
- `401` — Unauthorized

---

[API](https://skmtc.net/nmi/apis/embedded-components-api.md) · [All operations](https://skmtc.net/nmi/apis/embedded-components-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/nmi/embedded-components-api/revisions/45c2ecda3685/schema)
