Skip to content

Promo codes

Take a promo code off a new plan or an add-on, see exactly what it does before you pay, and remove it if you change your mind. Staff: make codes, set limits, and see the most each plan allows.

A promo code takes money off a new plan or off an add-on. You type it in Start a plan or Add to plan, the page shows what it does, and you pay the lower price. Nothing is used up until you pay.

Use a promo code on a plan

  1. Open Start a plan from Billing, pick a plan, and select Continue.
  2. On the Summary step, select Have a promo code?. A field opens.
  3. Type the code and select Apply. Capitals and small letters both work.
  4. The New plan details card now shows a Promo code line with the discount, the new Total, what is Due today, and the regular price each month or year.
  5. Select Pay and continue. The code is used when the payment goes through.

To change your mind, select Remove next to the code. The totals go back to what they were, and a plan with a free first month gets its free month back.

A link such as https://avaloi.com/pricing?promo=SPRING10 or https://avaloi.com/signup?plan=starter&promo=SPRING10 fills the code for you. It follows you through sign up and is checked on the Summary step like any code you type. It is not used until you pay.

A promo code replaces the free first month

Your first plan can have a free first month. A promo code never stacks on top of it. When you apply a code to a plan with a free first month:

  • The free month is dropped, and you pay the discounted price today.
  • The Summary says so in one sentence: "A promo code replaces the free first month. You pay $31.50 today instead. Remove the code to keep the free month."
  • Select Remove to get the free month back.

Pick whichever is better for you. Avaloi does not choose for you, and nothing changes after you pay.

How long a discount lasts

The Summary says it in plain words under the totals:

Code What the Summary says
The first payment "The discount applies to the first payment only. After that the price is $35.00 each month."
A number of months "You pay $31.50 each month until Jan 7, 2027. After that the price is $35.00 each month."
Every payment "You pay $31.50 each month for as long as the plan lasts."

A percent discount is rounded to the nearest cent. A fixed discount never takes a payment below $0.

Use a promo code on an add-on

In Add to plan (for example, extra disk space or WordPress sites), select Have a promo code?, type the code, and select Apply. An add-on code takes effect on the first, prorated charge only. After that the add-on costs its regular monthly price. The dialog says so, and after you pay it shows how much the code took off.

A code that is meant for plans does not work on an add-on, and the other way round.

When a code does not work

Every code that cannot be used gets the same answer: "That promo code cannot be used. Check the spelling, or ask for a new code." That covers a code that does not exist, one that ran out, one that expired, one that is off, one you already used, and one that is not for this plan or add-on. The page never says which, so codes cannot be found by trying them.

One more answer is different: if a code is real but would leave Avaloi under its margin on the plan you chose, the page says "That promo code does not apply to this plan." Nothing is charged and no use is taken.

Too many wrong tries in a few minutes stop further tries for a while: "Too many promo code attempts. Try again in a few minutes." Right codes do not count toward the limit.

See the code you used

  • Billing, then My plan: the plan's price cell shows "Promo code SPRING10: 10% off the first payment." A repeating discount also shows when it ends.
  • Billing, then Invoices: an invoice that had a discount shows it under the total, such as "Promo code SPRING10 -$3.50". The lines add up to the total.
  • Download PDF opens Stripe's invoice, which lists the discount with the name of the promo.

For staff: make and manage codes

Staff open Promo codes in the side menu. The page lists every code with its discount, what it covers, uses, expiry, and status. A code that failed to sync to Stripe says so under its status. Use the row menu to see who used a code, turn it off or on, or sync it to Stripe again.

Select New promo code and fill in:

  • Name: what customers see on the order and on the invoice. At most 40 characters.
  • Code: letters, digits, dashes, and underscores.
  • Discount type: a percent (up to two decimals, such as 12.5) or dollars off in USD.
  • How long it lasts: the first payment, a number of months, or every payment.
  • Applies to: plans, add-ons, or both. Choose plans and billing periods, or leave them all unchecked to cover everything the margin check allows. An add-on discount always applies to the first, prorated charge, so add-on codes last for the first payment only and are a percent.
  • Total uses, Uses per customer, Last day, First time customers only, and whether the code is on as soon as it is saved.

The discount cannot change after you save, because Stripe coupons cannot change. To change it, make a new code and turn the old one off. The limits, the expiry, the name, and the on or off setting can change at any time.

The margin check is strict

No promo code may take any plan it covers under a 30 percent margin, in any billing period it applies to. There is no override, no acknowledgment, and no allowance for a short discount.

Margin is profit divided by the price the customer pays after the discount. Profit is that price, less Stripe's card fee on that discounted charge (2.9 percent plus 30 cents), less the plan's cost: its share of the node, the data disk, and the 70 percent fill the plan prices are built on (ADR 034). A margin of exactly 30 percent is allowed; one cent less is refused.

  • Once, for months, or forever all get the same check, because a discounted charge is the same every period. A code for a number of months must hold in every discounted month.
  • A code replaces the free first month, so the first paid charge must hold too. It is the same discounted charge.
  • Annual plans are ten months of price for twelve months of server cost, so they are under 30 percent before any code. No discount is allowed on them. Leave Annual unchecked under billing periods.
  • Add-ons must be a percent, and only the site slot has a cost model. A code cannot cover an add-on that has none.

As you type, the form shows the most allowed for the plans the code covers, and the Margin with this code table shows each plan's own limit. A percent or dollar amount above the lowest limit shows an error, and Save promo code stays off. A code for all plans is limited by the plan with the least room, so choose the plans the code applies to, one by one, for a bigger discount.

The most a code may take off each plan today (us-east4, monthly, at the launch prices):

Plan Price Most percent off Most dollars off
Starter $35 12.52% $4.38
Pro $115 1.28% $1.47
Business 1 $285 0.64% $1.82
Business 2 $755 0.09% $0.74
Business 3 $2,265 0.13% $3.14
Agency $2,830 0.09% $2.80
Site slot add-on $40 5.76% not allowed

These numbers move with Google's price. The check runs again whenever it matters:

  1. When you save a code. A code that goes past a limit is refused, and the message names the plan and the largest discount that would be allowed.
  2. When you change a code. A code that is on and no longer holds cannot be changed or turned on. You can always turn it off.
  3. When a customer uses it. The check uses the plan's price and cost right then. If the price or the node cost moved, so that the code would lose margin, the code does not apply, the customer sees "That promo code does not apply to this plan.", and nothing is charged. The first customer in a region with no node pays an opening price built at 25 percent fill (ADR 043), which has almost no room, so codes do not apply there until a node is running.

Each save, change, turn on or off, and sync is written to the audit log with who did it.

For scripts and agents

  • POST /v1/billing/promo-codes/validate with {"code": "SPRING10", "target": {"kind": "plan", "lookup_key": "plan_starter_monthly"}} (or {"kind": "addon", "addon_key": "site_slot"}) answers {"valid": true, "promo": {...}} with the discount, the first charge, the price after, and free_month_replaced, or {"valid": false, "message": "..."}. It changes nothing. It needs billing:read and the billing.write permission. Wrong guesses are limited: past the limit it answers 429 with Retry-After and the code promo_rate_limited.
  • GET /v1/billing/plan-preview?lookup_key=plan_starter_monthly&promo_code=SPRING10 adds discount_cents, recurring_cents, and promo to the preview. A code that cannot be used is left out.
  • POST /v1/billing/subscriptions takes promo_code. A code that cannot be used answers 422 with the code promo_code_invalid, and nothing is charged.
  • POST /v1/companies/me/addons takes promo_code. The 202 answer has discount_cents.
  • GET /v1/billing/promo-redemptions lists the codes this company used.
  • Staff only: GET and POST /v1/staff/promo-codes, POST /v1/staff/promo-codes/margin, GET and PATCH /v1/staff/promo-codes/{id}, POST /v1/staff/promo-codes/{id}/sync, and GET /v1/staff/promo-codes/{id}/redemptions. There is no tool that creates a code. The MCP tools preview_plan and start_plan take an optional promo_code that a person gave you; never guess codes.

Quick answers

Can I use two codes on one plan? No. One code applies to one plan or one add-on purchase.

Can I use a code on a plan I already have? No. A promo code is for a new plan or a new add-on purchase.

Does the code come off my renewals? Only as long as the Summary said it would: the first payment, the months listed, or every payment.

Do I still get the shared node credit? Not for a billing period a promo code discounts. The credit returns profit above the 30 percent floor of the list price, and a discounted period has less of it. It comes back after the discount ends. See Region prices and the shared node credit.

Will I get the free first month back if I remove the code? Yes, before you pay. After you pay, the plan is already started.

Still stuck?

Email [email protected] with your site name and what you tried, or send us a message.