---
title: "Create a price."
method: POST
path: "/v2/prices"
tags: ["Prices"]
---

# Create a price.

`POST /v2/prices`

## Request body

- PriceRequest — A simple product price. Use a rate card directly on a contract line for richer usage rating.
  - `product_id` string, required — LedgerUp resource identifier.
  - `stripe_price_id` string, nullable
  - `billing_mode` 'flat' | 'per_unit' | 'per_seat' | 'usage_sum' | 'last_metric_reported' | 'tiered_usage' | 'package' | 'minimum_commit', required — How a price or rate converts a contract line into invoice amount.
  - `currency_code` string, required
  - `interval` 'month' | 'quarter' | 'year' | 'one_time' | 'contract_term', required — How often the line is evaluated for billing.
  - `unit_amount_minor_units` integer, nullable
  - `unit_scale` string, nullable — Units represented by one billable quantity. Example: 1000000 characters.
  - `metadata` unknown

## Response `200`

Success.

- Price
  - `id` string, required — LedgerUp resource identifier.
  - `product_id` string, required — LedgerUp resource identifier.
  - `stripe_price_id` string, nullable, required
  - `billing_mode` 'flat' | 'per_unit' | 'per_seat' | 'usage_sum' | 'last_metric_reported' | 'tiered_usage' | 'package' | 'minimum_commit', required — How a price or rate converts a contract line into invoice amount.
  - `currency_code` string, required
  - `interval` 'month' | 'quarter' | 'year' | 'one_time' | 'contract_term', required — How often the line is evaluated for billing.
  - `unit_amount_minor_units` integer, nullable, required
  - `unit_scale` string, nullable, required
  - `metadata` unknown, required
  - `created_at` integer, required — Unix timestamp in seconds.
  - `updated_at` integer, required — Unix timestamp in seconds.
  - `archived_at` integer, required — Unix timestamp in seconds.

## Other responses

- `400` — Bad request, invalid header, invalid amount/quantity/currency, or text validation failure.
- `401` — Missing or invalid API key.
- `403` — API key lacks the required permission, or reset was attempted outside the test namespace.
- `408` — Request exceeded the 30 second timeout.
- `413` — Request body exceeded the 256 KiB limit.
- `415` — Write request content type was not application/json.
- `422` — Semantically invalid request, such as a service period with start greater than end.
- `429` — Rate limit exceeded.
- `500` — Internal server error or queue failure.

---

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