Discount rules

How a discount rule is configured, how percentage and fixed discounts differ, when the discount applies on prepaid versus postpaid providers, and what happens at renewal.

2 min read2 sections

A discount rule sets promotional pricing for a group of customers on a group of servers — half off a new customer's first Contabo server for its opening month, say, or a fixed amount off any server bought with a coupon code.

This page covers what each field on a rule means, how percentage and fixed discounts differ, and what happens when the discounted period runs out.

3. Setting up your rule

In the admin panel

Admin → Discount Rules → Create Rule. Three groups:

What it is — name, description, status, priority

Who and what — Automatic or Coupon code; provider; applies to; audience; first-server-only; specific customer

The discount — type, value, max discount, duration, live dates, limits

For your requirement — a new customer's first server, discounted for the opening month, per provider — one rule per provider:

FieldValue
Rule nameContabo first-server offer
TriggerAutomatic
ProviderContabo
AudienceNew customers
First server only
TypePercentage (or Fixed)
Percentage off50
Max discount (INR)1000 — set this
DurationA number of months → 1
Live from / untilyour campaign dates

A live preview sits under the form and updates as you type:

Read that sentence before saving. It is the cheapest check that you configured what you meant, and it catches "I meant ₹500 off, not 500% off".

Amber warnings appear for an uncapped percentage, a missing USD amount, a forever duration, and a rule that would match nobody.

Percentage or fixed

  • Percent — 50 with max_discount_inr: 1000 is half price, never more than ₹1,000 off. Always set the cap, or the discount scales with the plan.
  • Fixed — set both currencies. A USD customer gets nothing if only the INR figure is filled in.

8. Design decisions worth knowing

Claim before charge, release on failure. A prepaid card is charged before a server row exists, so the discount is reserved first and released if the gate or provisioning fails — a single-use offer is never burned by a server that never existed.

Months, not invoicesintro_months_remaining counts months. One postpaid invoice consumes one month; one prepaid 12-month term can consume several. Counting invoices would misprice every prepaid term.

Consumption is separate from quotingdiscountForCharge() computes; consume() spends. A charge that fails after quoting does not eat the offer.

Terms are frozen at redemption. Editing a rule never rewrites an existing customer's bill.

A failed discount lookup never blocks an order. The customer sees list price — what they would have paid anyway.

Zero-total terms skip the gateway. A 100% discount is recorded paid_advance; payment gateways reject a zero charge.

Something here not matching what you see in the panel?

Tell us
Start your journey today

Ready to take control
of your hosting?

Deploy servers, run self-hosted business apps, and keep your data on your own VPS — with a dedicated DevOps manager by your side.

No lock-in contracts
No credit card required
Dedicated DevOps manager