---
title: "Update a coupon"
method: PATCH
path: "/api/v1/coupons/{coupon_id}"
tags: ["Coupons"]
---

# Update a coupon

`PATCH /api/v1/coupons/{coupon_id}`

## Path parameters

- `coupon_id` string, MeteroidId, required

## Request body

- UpdateCouponRequest
  - `description` string, nullable
  - `discount` union
    - PercentageDiscount
      - `percentage` string, required
    - FixedDiscount
      - `amount` string, required
      - `currency` string, required
  - `plan_ids` PlanId[], nullable

## Response `200`

Coupon updated

- Coupon
  - `archived_at` string, date-time, nullable
  - `code` string, required
  - `created_at` string, date-time, required
  - `description` string, nullable
  - `disabled` boolean, required
  - `discount` union, required
    - PercentageDiscount
      - `percentage` string, required
    - FixedDiscount
      - `amount` string, required
      - `currency` string, required
  - `expires_at` string, date-time, nullable
  - `id` string, MeteroidId, required
  - `plan_ids` PlanId[], required
  - `recurring_value` integer, nullable
  - `redemption_count` integer, required
  - `redemption_limit` integer, nullable
  - `reusable` boolean, required

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `404` — Coupon not found
- `429` — Too many requests

## Changes

> 54 revisions in range; 2 could not be searched.

- **2026-08-12** (v1) `4e013b4e4a8f` — 2 breaking, 4 info
  - the response property `description` became nullable for the status `200`
  - the response property `description` became optional for the status `200`
  - added the optional property `archived_at` to the response with the `200` status
  - added the required property `created_at` to the response with the `200` status
  - …2 more
- **2026-03-31** (v1) `ee465c53a423` — 3 breaking, 2 info
  - removed `#/components/schemas/CouponDiscountRest` from the `discount` request property `oneOf` list
  - the `discount/oneOf[#/components/schemas/FixedDiscount]/amount` response's property type/format changed from `string`/`decimal` to `string`/`` for status `200`
  - the `discount/oneOf[#/components/schemas/PercentageDiscount]/percentage` response's property type/format changed from `string`/`decimal` to `string`/`` for status `200`
  - added `#/components/schemas/CouponDiscount` to the `discount` request property `oneOf` list
  - …1 more
- …earlier changes not shown

[Full history](https://skmtc.dev/meteroid-oss/apis/meteroid/changes/api/v1/coupons/:coupon_id/patch.md)

---

[API](https://skmtc.dev/meteroid-oss/apis/meteroid.md) · [All operations](https://skmtc.dev/meteroid-oss/apis/meteroid/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/meteroid-oss/meteroid/revisions/03f9d8ae5c5e/schema)
