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

# POST /coupons/coupon

`POST /coupons/coupon`

Creates a coupon.

## Request body

- CreateCouponRequest
  - `name` string, required — Coupon name. Can't contain spaces or special characters.
  - `discountPercentage` number, required — Discount percentage applied by the coupon.
  - `active` boolean — Whether the coupon is active.
  - `maxRedemptionsPerCustomer` integer — Maximum number of times a customer can redeem this coupon.
  - `expiredBy` string, date-time — Expiration date of the coupon.
  - `startsAt` string, date-time — Start date of the coupon validity. If not provided, defaults to current date and time.
  - `supportedOfferExternalIds` string[] — List of offer IDs which this coupon applies. Empty array means all offers are supported. **Note:** This represents both the `offer.sku` value in the [Create Checkout Session API](../checkout-session/create-checkout-session), and the `publisherOfferId` in the [Offers V2 API](../../webstore/offers-v2/introduction).
  - `firstTimePurchase` boolean — Whether the coupon is only valid for first-time purchases.
  - `allowedPlayers` string[] — List of player IDs that can redeem this coupon.

## Response `200`

Coupon created successfully.

- CouponResponse
  - `name` string — Coupon name.
  - `active` boolean — Whether the coupon is active.
  - `discountPercentage` number — Discount percentage applied by the coupon.
  - `maxRedemptionsPerCustomer` integer — Maximum number of times a customer can redeem this coupon.
  - `expiredBy` string, date-time — Expiration date of the coupon.
  - `startsAt` string, date-time — Start date of the coupon validity.
  - `supportedOfferExternalIds` string[] — List of offer external IDs that support this coupon. Empty array means all offers are supported.
  - `firstTimePurchase` boolean — Whether the coupon is only valid for first-time purchases.
  - `allowedPlayers` string[] — List of player IDs allowed to use this coupon. Empty array means all players are allowed.

## Other responses

- `400` — Bad request. Invalid input or validation failure.
- `409` — Conflict. A coupon with the same name already exists.
- `500` — Unexpected error.

---

[API](https://skmtc.net/appcharge/apis/grant-award.md) · [All operations](https://skmtc.net/appcharge/apis/grant-award/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/appcharge/grant-award/revisions/b4f6759240d5/schema)
