BillKit/DocsConsole
Coupons

Create coupon

Create a discount code customers can enter at checkout.

POST/v1/coupons
Operation create_coupon·Scope coupons:write·OpenAPI v1.1.0

Parameters

ParameterDescription
codestringrequiredThe code customers enter. Stored trimmed and uppercased, so matching ignores case; must be unique on your account. At most 64 characters.
amount_off_centsinteger | nulloptionalFixed amount off, in minor units of currency. Exactly one of percent_off and amount_off_cents. Between 1 and 99999999.
applies_to_price_idsarray of string | nulloptionalIds of the prices the coupon can be used with. Null or empty for any price.
currencystring | nulloptionalThree-letter ISO 4217 currency of amount_off_cents and min_amount_cents; the coupon then applies only to prices in it. Required with either when your account has more than one currency enabled, and otherwise defaults to your one currency. At most 3 characters.
discount_typeenum | nulloptionalOptional. Implied by whichever of percent_off and amount_off_cents is set; must agree when sent. One of percent, fixed_amount.
durationenumoptionalHow long the discount applies once redeemed. once discounts the first charge; repeating every charge within duration_in_months months of the first discounted charge; forever every charge. One of once, forever, repeating. Defaults to "once".
duration_in_monthsinteger | nulloptionalNumber of months a repeating coupon applies. Required when duration is repeating. Between 1 and 120.
max_redemptionsinteger | nulloptionalMaximum number of times the coupon can be redeemed. Null for no limit. Between 1 and 2147483647.
min_amount_centsinteger | nulloptionalMinimum charge, before the discount, in minor units of currency, for the coupon to apply. Requires currency to be known. Null for no minimum. Between 0 and 99999999.
percent_offnumber | nulloptionalPercent off, more than 0 and at most 100, with up to two decimal places (12.5). Exactly one of percent_off and amount_off_cents. Maximum 100.
redeem_byinteger | nulloptionalLast time the coupon can be redeemed, in Unix seconds. Null for no deadline. Between 0 and 253402300799.

Returns

Returns a CouponResponse object.

Errors

StatusCause
400The request was refused (type: invalid_request_error): a required parameter is missing (parameter_missing), one failed validation (parameter_invalid) or is not one the operation takes (parameter_unknown), and param names it.
401No credential, or one that does not authenticate.
402The account is suspended (tenant_suspended), or the payment provider refused a charge or refund the call made (type: payment_error, code: payment_refused).
403Authenticated, but not allowed: missing scope (insufficient_scope), a key of the wrong mode (mode_mismatch), or a refused origin. Needs the coupons:write scope.
404No such object in this account and mode.
409Conflicts with the object's current state (state_conflict, or a more specific code), or an operation still in flight (operation_pending).
413The request body is larger than the API accepts.
429Rate limited. Retry-After says when to try again.
500Something failed on BillKit's side (type: api_error). Retry with the same Idempotency-Key.
502The payment provider failed or did not answer.
503Temporarily unable to serve. reason says whether the request was attempted.
Request · curl
curl -X POST https://api.billkit.eu/v1/coupons \
  -H "Authorization: Bearer $BILLKIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code":"LAUNCH","percent_off":20}'
Request body · every field
{
  "amount_off_cents": 1900,
  "applies_to_price_ids": [
    "string"
  ],
  "code": "string",
  "currency": "EUR",
  "discount_type": "percent",
  "duration": "once",
  "duration_in_months": 0,
  "max_redemptions": 0,
  "min_amount_cents": 1900,
  "percent_off": 0,
  "redeem_by": 0
}
Response · 200 OK
{
  "active": false,
  "amount_off_cents": 1900,
  "applies_to_price_ids": [
    "string"
  ],
  "code": "string",
  "created": 1789392000,
  "currency": "EUR",
  "discount_type": "percent",
  "duration": "once",
  "duration_in_months": 0,
  "id": "coup_9XKp2vQ1",
  "livemode": false,
  "max_redemptions": 0,
  "min_amount_cents": 1900,
  "object": "coupon",
  "percent_off": 0,
  "redeem_by": 0,
  "redemptions_count": 0
}