---
title: "Create a custom billing price"
method: POST
path: "/billing/prices"
tags: ["Billing"]
---

# Create a custom billing price

`POST /billing/prices`

Creates a custom price for a billing plan. Custom prices allow you to offer different pricing
to specific customers while maintaining the same plan structure.

## Request body

- CreateBillingPriceRequest
  - `plan_id` string, required — The ID of the plan this price belongs to.
  - `currency` string — The currency code (e.g., "USD"). Defaults to USD.
  - `amount` integer, nullable, required — The monthly amount in cents. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents).
  - `annual_monthly_amount` integer, nullable — The monthly amount in cents when billed annually. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents).
  - `description` string — An optional description for this custom price.
  - `supported_billing_periods` 'month' | 'annual' | 'both' — Which billing periods this price supports. Inferred from amounts if omitted.

## Response `200`

A billing price.

- BillingPriceResponse
  - `object` 'commerce_price', required — String representing the object's type. Objects of the same type share the same value.
  - `id` string, required — Unique identifier for the price.
  - `plan_id` string, required — Unique identifier for the associated plan.
  - `instance_id` string, required — Unique identifier for the instance.
  - `currency` string, required — The currency code (e.g., "USD").
  - `currency_symbol` string, required — The currency symbol (e.g., "$").
  - `amount` integer, required — The amount in cents for the price.
  - `annual_monthly_amount` integer, required — The monthly amount in cents when billed annually.
  - `fee` CommerceMoneyResponse, required
    - `amount` integer, required — The amount in cents.
    - `amount_formatted` string, required — The formatted amount as a string (e.g., "$49.99").
    - `currency` string, required — The currency code (e.g., "USD").
    - `currency_symbol` string, required — The currency symbol (e.g., "$").
  - `annual_monthly_fee` CommerceMoneyResponse, required
    - `amount` integer, required — The amount in cents.
    - `amount_formatted` string, required — The formatted amount as a string (e.g., "$49.99").
    - `currency` string, required — The currency code (e.g., "USD").
    - `currency_symbol` string, required — The currency symbol (e.g., "$").
  - `description` string, nullable — The description of the price.
  - `is_default` boolean, required — Whether this price is the default price for its plan.
  - `created_at` integer, required — Unix timestamp (milliseconds) of creation.
  - `supported_billing_periods` 'month' | 'annual' | 'both', required — Which billing periods this price supports.

## Other responses

- `400` — Request was not successful
- `401` — Authentication invalid
- `404` — Resource not found
- `422` — Invalid request parameters
- `500` — Request was not successful

---

[API](https://skmtc.net/clerk/apis/clerk-backend-api.md) · [All operations](https://skmtc.net/clerk/apis/clerk-backend-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/clerk/clerk-backend-api/revisions/75df3a43fcb2/schema)
