{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/stripe/main/json-schema/stripe-post-coupons-request-schema.json", "title": "PostCouponsRequest", "x-generated": "2026-10-12", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/stripe-coupons-api-openapi.yml#/components/schemas/PostCouponsRequest", "type": "object", "properties": { "amount_off": { "description": "A positive integer representing the amount to subtract from an invoice total (required if `percent_off` is not passed).", "type": "integer" }, "applies_to": { "description": "A hash containing directions for what this Coupon will apply discounts to.", "properties": { "products": { "items": { "maxLength": 5000, "type": "string" }, "type": "array" } }, "title": "applies_to_params", "type": "object" }, "currency": { "description": "Three-letter [ISO code for the currency](https://stripe.com/docs/currencies) of the `amount_off` parameter (required if `amount_off` is passed).", "type": "string" }, "currency_options": { "additionalProperties": { "properties": { "amount_off": { "type": "integer" } }, "required": [ "amount_off" ], "title": "currency_option", "type": "object" }, "description": "Coupons defined in each available currency option (only supported if `amount_off` is passed). Each key must be a three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html) and a [supported currency](https://stripe.com/docs/currencies).", "type": "object" }, "duration": { "description": "Specifies how long the discount will be in effect if used on a subscription. Defaults to `once`.", "enum": [ "forever", "once", "repeating" ], "type": "string", "x-stripeBypassValidation": true }, "duration_in_months": { "description": "Required only if `duration` is `repeating`, in which case it must be a positive integer that specifies the number of months the discount will be in effect.", "type": "integer" }, "expand": { "description": "Specifies which fields in the response should be expanded.", "items": { "maxLength": 5000, "type": "string" }, "type": "array" }, "id": { "description": "Unique string of your choice that will be used to identify this coupon when applying it to a customer. If you don't want to specify a particular code, you can leave the ID blank and we'll generate a random code for you.", "maxLength": 5000, "type": "string" }, "max_redemptions": { "description": "A positive integer specifying the number of times the coupon can be redeemed before it's no longer valid. For example, you might have a 50% off coupon that the first 20 readers of your blog can use.", "type": "integer" }, "metadata": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "enum": [ "" ], "type": "string" } ], "description": "Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`." }, "name": { "description": "Name of the coupon displayed to customers on, for instance invoices, or receipts. By default the `id` is shown if `name` is not set.", "maxLength": 40, "type": "string" }, "percent_off": { "description": "A positive float larger than 0, and smaller or equal to 100, that represents the discount the coupon will apply (required if `amount_off` is not passed).", "type": "number" }, "redeem_by": { "description": "Unix timestamp specifying the last time at which the coupon can be redeemed. After the redeem_by date, the coupon can no longer be applied to new customers.", "format": "unix-time", "type": "integer" } } }