Creates the coupon in Stripe, keeps a local copy for search and returns it. Send exactly one of percentOff or amountOffCents (with currency); durationInMonths is required with duration: repeating and not allowed otherwise. Breaking either rule returns 400. Super admin only.
Body
Required
-
Stripe coupon id — THIS IS THE REDEEMABLE CODE customers type. Stripe generates a random one when omitted.
-
Human-readable name shown on the invoice
-
Percent discount, 1-100. Mutually exclusive with amountOffCents.
-
Fixed discount in cents. Requires currency.
-
ISO currency, required with amountOffCents
-
Values are
once,repeating, orforever. -
Months to repeat for — required when duration is "repeating"
-
Total redemptions allowed across all customers
-
Cannot be applied after this instant (ISO 8601)
-
Restrict the discount to these Stripe product ids
-
Audit note — why this coupon was issued
curl \
--request POST 'http://api.example.com/admin/billing/coupons' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"couponId": "string",
"name": "string",
"percentOff": 42.0,
"amountOffCents": 42.0,
"currency": "usd",
"duration": "once",
"durationInMonths": 42.0,
"maxRedemptions": 42.0,
"redeemBy": "2026-05-04T09:42:00Z",
"appliesToProducts": [
"string"
],
"metadata": {},
"reason": "string"
}'
{
"couponId": "string",
"name": "string",
"percentOff": 42.0,
"amountOffCents": 42.0,
"currency": "usd",
"duration": "once",
"durationInMonths": 42.0,
"maxRedemptions": 42.0,
"redeemBy": "2026-05-04T09:42:00Z",
"appliesToProducts": [
"string"
],
"metadata": {},
"reason": "string"
}
{
"data": {
"couponId": "SPRING20",
"name": "Spring 20% off",
"percentOff": 20,
"amountOffCents": 42.0,
"currency": "string",
"duration": "repeating",
"durationInMonths": 3,
"maxRedemptions": 50,
"redeemBy": "2026-06-30T23:59:59.000Z",
"timesRedeemed": 4,
"status": "active",
"reason": "Spring promotion approved by sales",
"deletedAt": "2026-05-04T09:42:00Z"
},
"statusCode": 201,
"timestamp": "2026-01-15T10:15:00.000Z"
}