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:
| Field | Value |
|---|---|
| Rule name | Contabo first-server offer |
| Trigger | Automatic |
| Provider | Contabo |
| Audience | New customers |
| First server only | ✅ |
| Type | Percentage (or Fixed) |
| Percentage off | 50 |
| Max discount (INR) | 1000 — set this |
| Duration | A number of months → 1 |
| Live from / until | your 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 —
50withmax_discount_inr: 1000is 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 invoices. intro_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 quoting. discountForCharge() 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