---
title: "Create Plan"
method: POST
path: "/api/v1/admin/plans"
tags: ["Admin APIs", "plans"]
---

# Create Plan

`POST /api/v1/admin/plans`

Create a new plan.

Validates that there's no other active plan for the same client-product pair.

## Request body

- PlanCreate — Plan creation schema - status is automatically set based on starts_at.
  - `name` string, required
  - `product_id` string, uuid, required
  - `client_id` string, uuid, required
  - `amount` number, required
  - `billing_cycle` string
  - `starts_at` string, date-time, nullable
  - `ends_at` string, date-time, nullable
  - `config` object, nullable

## Response `200`

Successful Response

- PlanRead
  - `name` string, required
  - `product_id` string, uuid, nullable
  - `client_id` string, uuid, required
  - `amount` number, required
  - `billing_cycle` string
  - `status` string, nullable
  - `starts_at` string, date-time, nullable
  - `ends_at` string, date-time, nullable
  - `config` object, nullable
  - `id` union, required
    - string, uuid
    - string
  - `canceled_at` string, date-time, nullable
  - `trial_end` string, date-time, nullable
  - `stripe_subscription_id` string, nullable
  - `stripe_customer_id` string, nullable — Stripe customer id (cus_...) for this plan/client
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `created_by` string, nullable
  - `updated_by` string, nullable
  - `billing_email` string, email, nullable
  - `daily_token_limit` number, nullable — Configured daily token limit from plan
  - `enterprise_fields` EnterpriseFields
    - `mcp_amount` number, nullable — MCP subscription item unit amount (dollars) from stripe_subscription_items
    - `mcp_billing_cycle` string, nullable — MCP subscription item recurring interval (e.g. month/year) from stripe_subscription_items
  - `grace_period_started_at` string, date-time, nullable
  - `failed_payment_retry_count` integer
  - `is_suspended` boolean
  - `suspended_at` string, date-time, nullable
  - `source` string, nullable — Where the plan record came from: 'database' or 'stripe'
  - `stripe_cancel_at` string, date-time, nullable — Scheduled cancellation date from linked Stripe subscription
  - `stripe_canceled_at` string, date-time, nullable — Actual cancellation date from linked Stripe subscription

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/carbonarc/apis/carbon-arc-client-admin-api.md) · [All operations](https://skmtc.net/carbonarc/apis/carbon-arc-client-admin-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/carbonarc/carbon-arc-client-admin-api/revisions/a8ca30023371/schema)
