---
title: "Changes to Create Promo Code"
method: POST
path: "/promo_codes"
---

# Changes to Create Promo Code

`POST /promo_codes`

> Every recorded change to this endpoint, newest first.
> 74 revisions in range; 1 not diffed.

## Timeline

Changed in 3 of 74 revisions.

- **2026-08-12** `ae20b30817de` — 1 info
- **2026-08-07** `f1020c3ecda4` — 1 info
- **2026-08-04** `bdd0e2c70d58` — 15 breaking, 6 warning, 16 info

## Changes

- **2026-08-12** `ae20b30817de` — 1 info
  - added the non-success response with the status `409`
- **2026-08-07** `f1020c3ecda4` — 1 info
  - added the optional property `error/code` to the response with the `401` status
- **2026-08-04** `bdd0e2c70d58` — 15 breaking, 6 warning, 16 info
  - added the new required request property `account_id`
  - the request property `churned_users_only` became not nullable
  - the request property `existing_memberships_only` became not nullable
  - the request property `one_per_customer` became not nullable
  - the request property `plan_ids` became not nullable
  - the request property `unlimited_stock` became not nullable
  - the `expires_at` request property format changed from `date-time` to no format
  - added `#/components/schemas/PromoCodeProduct, subschema #2` to the `product` response property `oneOf` list for the response status `200`
  - the `created_at` response's property format changed from `date-time` to no format for status `200`
  - the `duration` response's property type changed from no type to `string` for status `200`
  - the `expires_at` response's property format changed from `date-time` to no format for status `200`
  - the `product` response's property type changed from `object, null` to no type for status `200`
  - removed the required property `company` from the response with the `200` status
  - removed the required property `product/id` from the response with the `200` status
  - removed the required property `product/title` from the response with the `200` status
  - removed the request property `company_id`
  - removed the optional property `error/code` from the response with the `401` status
  - removed the optional property `error/param` from the response with the `401` status
  - added the new `forever` enum value to the `duration` response property for the response status `200`
  - added the new `once` enum value to the `duration` response property for the response status `200`
  - added the new `repeating` enum value to the `duration` response property for the response status `200`
  - the security scope `access_pass:basic:read` was removed from the endpoint's security scheme `bearerAuth`
  - api tag `Promo Codes` added
  - api tag `Promo codes` removed
  - added the new optional `header` request parameter `Api-Version-Date` to all path's operations
  - added the new optional `header` request parameter `Idempotency-Key`
  - request body became optional
  - removed the non-success response with the status `400`
  - removed the non-success response with the status `403`
  - removed the non-success response with the status `404`
  - removed the non-success response with the status `422`
  - removed the non-success response with the status `429`
  - removed the non-success response with the status `500`
  - removed `#/components/schemas/PromoDurations, subschema #2` from the `duration` response property `oneOf` list for the response status `200`
  - added the required property `account` to the response with the `200` status
  - added the required property `metadata` to the response with the `200` status
  - added the required property `updated_at` to the response with the `200` status

---

[Operation](https://skmtc.dev/whop/apis/whop-api/docs/promo_codes/post.md) · [API](https://skmtc.dev/whop/apis/whop-api.md) · [Page](https://skmtc.dev/whop/apis/whop-api/changes/promo_codes/post)
