Skip to main content
A discount is a code that reduces price at checkout — percentage-off or fixed-amount, optionally limited in duration, redemptions, and which price variants it covers. Create it once, then apply it wherever buyers pay. You can ask Crevio to “make a 20% launch code that expires in two weeks” and the agent creates the discount through the same API below. For programmatic campaigns, you’ll create them directly.

The discount model

POST /discounts returns a discount with an id like disc_.... The shape is centered on two enums: the type of discount and its duration.
FieldTypeNotes
codestringThe code buyers enter, e.g. LAUNCH20.
discount_typeenumpercentage or fixed.
percent_offnumberThe percentage off (for percentage discounts), e.g. 20.
amount_offint (cents)The amount off (for fixed discounts), e.g. 1000 = $10.00.
currencystringLowercase ISO, required for fixed discounts.
durationenumforever, once, or repeating — how long the discount applies to a subscription.
duration_in_monthsintRequired when duration is repeating.
redeem_bydate-timeExpiry — the code stops working after this.
max_redemptionsintTotal number of times the code can be used.
price_variantsarrayPrice variant ids (price_...) the discount is scoped to. Omit to apply account-wide.
duration matters most for subscriptions: once discounts only the first charge, repeating discounts for duration_in_months, and forever discounts every charge. For one-time purchases the discount simply applies to that purchase.

Worked example: a 20% launch code

A percentage code, capped at 500 redemptions, expiring in two weeks, applying to everything:
curl -X POST https://api.crevio.co/v1/discounts \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "LAUNCH20",
    "discount_type": "percentage",
    "percent_off": 20,
    "duration": "once",
    "redeem_by": "2026-07-05T00:00:00Z",
    "max_redemptions": 500
  }'
const discount = await crevio.discounts.create({
  code: "LAUNCH20",
  discount_type: "percentage",
  percent_off: 20,
  duration: "once",
  max_redemptions: 500,
});

Worked example: $10 off, scoped to one variant

A fixed-amount code that only works on a specific price variant:
curl -X POST https://api.crevio.co/v1/discounts \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "SAVE10",
    "discount_type": "fixed",
    "amount_off": 1000,
    "currency": "usd",
    "duration": "once",
    "price_variants": ["price_abc123"]
  }'
Because price_variants lists a single variant, SAVE10 is rejected at checkout for any other item.

Applying a discount

A discount reaches a buyer in one of two ways:

At checkout — discount_code

Pass the code’s string when creating a checkout:
curl -X POST https://api.crevio.co/v1/checkouts \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "discount_code": "LAUNCH20",
    "line_items": [{ "price_variant": "price_abc123", "quantity": 1 }]
  }'
Attach a discount by id to a reusable checkout link so it’s applied automatically, and decide whether buyers may also enter their own code:
curl -X POST https://api.crevio.co/v1/checkout_links \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Launch link",
    "price_variants": ["price_abc123"],
    "discount": "disc_launch20",
    "allow_discount_codes": false
  }'
At checkout you reference a discount by its code (discount_code: "LAUNCH20"); on a checkout link you reference it by its id (discount: "disc_launch20"). Set allow_discount_codes: false to lock a link to just its attached discount.
Discounts support full CRUD — create, update, delete, list, and retrieve.

Next steps

Checkouts

Apply discounts via discount_code and on reusable checkout links.

Products & pricing

Create the price variants you scope discounts to.

Subscriptions & billing

How duration shapes discounts on recurring subscriptions.

Commerce overview

See where discounts sit in the full commerce model.