---
title: "Create coupon"
method: POST
path: "/coupons"
tags: ["Coupons"]
---

# Create coupon

`POST /coupons`

Use when creating a discount (e.g. promo code or referral). Ideal for percent or fixed value, with optional validity and usage limits.

## Request body

- CreateCouponRequest
  - `amount_off` string
  - `cadence` 'once' | 'repeated' | 'forever', required
  - `coupon_code` string
  - `currency` string
  - `duration_in_periods` integer
  - `max_redemptions` integer
  - `metadata` object
  - `name` string, required
  - `percentage_off` string
  - `redeem_after` string
  - `redeem_before` string
  - `rules` object
  - `type` 'fixed' | 'percentage', required

## Response `201`

Created

- CouponResponse
  - `amount_off` string
  - `cadence` 'once' | 'repeated' | 'forever'
  - `coupon_code` string
  - `created_at` string, date-time
  - `created_by` string
  - `currency` string
  - `duration_in_periods` integer
  - `environment_id` string
  - `id` string
  - `max_redemptions` integer
  - `metadata` object
  - `name` string
  - `percentage_off` string
  - `redeem_after` string
  - `redeem_before` string
  - `rules` object
  - `status` 'published' | 'deleted' | 'archived'
  - `tenant_id` string
  - `total_redemptions` integer
  - `type` 'fixed' | 'percentage'
  - `updated_at` string, date-time
  - `updated_by` string

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Resource not found
- `500` — Server error

## Changes

- **2026-07-15** `f8ecf435d25d` — 5 warning
  - added the new `not_implemented` enum value to the `code` response property for the response status `400`
  - added the new `not_implemented` enum value to the `code` response property for the response status `401`
  - added the new `not_implemented` enum value to the `code` response property for the response status `403`
  - added the new `not_implemented` enum value to the `code` response property for the response status `404`
  - …1 more
- **2026-07-09** `7d57386313c7` — 1 breaking, 3 warning
  - the `status` response's property type/format changed from ``/`` to `string`/`` for status `201`
  - added the new `archived` enum value to the `status` response property for the response status `201`
  - added the new `deleted` enum value to the `status` response property for the response status `201`
  - added the new `published` enum value to the `status` response property for the response status `201`
- **2026-07-09** `4b1a811c4179` — 3 breaking, 3 info
  - the `created_at` response's property type/format changed from `string`/`date-time` to `string`/`` for status `201`
  - the `status` response's property type/format changed from `string`/`` to ``/`` for status `201`
  - the `updated_at` response's property type/format changed from `string`/`date-time` to `string`/`` for status `201`
  - removed the `archived` enum value from the `status` response property for the response status `201`
  - …2 more
- …earlier changes not shown

[Full history](https://skmtc.dev/flexprice/apis/flexprice-api/changes/coupons/post.md)

---

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