Custom pricing (internal)
Super-admin per-account negotiated pricing for key and enterprise accounts
This is an internal article for super-admins. Custom pricing lets you give one account a negotiated price the public price list cannot express, sync it to Stripe, and have it appear at that account's checkout. Use it for enterprise and key-account deals.
The classic deal: the Professional feature set on the Enterprise tier at €25 per company, with every add-on included at €0. The base plan scales with the number of companies; the add-ons stay free no matter how many companies the account has.
How it works
Overrides live in account_pricing_overrides, one active row per package for the account. Each row carries a price and a "per company" flag. The plan row is per company (its Stripe quantity equals the company count); the add-on rows are flat at €0. Saving a row mints a real Stripe Price under the package's existing Product, so what the customer sees is exactly what they pay.
A negotiated deal is private. The signed-in admin of that account sees their price on the in-app pricing page and on the Stripe checkout. Everyone else, including the public pricing page, still sees the standard list prices.
Setting it up
Run npm run pricing:sync once so every package has a Stripe Product. Then open the account's admin area, go to Custom pricing, and either fill in a single package price or click "Apply enterprise preset" for the full €25-per-company-plus-free-add-ons deal. Give a reason; every save is recorded in an audit log.
If a save reports "not synced", the package has no Stripe Product yet. Run npm run pricing:sync and save again. Until a row is synced, checkout for that account fails closed rather than charging a wrong price.
A price change never edits a row in place. It deactivates the old row, archives its Stripe Price, and writes a new row with a new Price. Existing subscriptions keep their original Price until the customer changes plan.
What the customer sees
On the pricing page the Enterprise card shows the negotiated price with a working Subscribe button instead of "Contact sales", and each add-on shows "Included". Subscribe first opens the billing details form (address and VAT ID, prefilled from Stripe); the checkout then opens with the tax already calculated. At checkout the plan line reads €25 times the company count, and each add-on line reads €0. Adding or removing a company later adjusts the plan quantity on the next billing cycle; the add-ons stay at one.
Limits and cleanup
Custom pricing does not survive account deletion. The override rows and their audit log are removed with the account, the catalog subscription is cancelled, and the custom Prices are archived in Stripe. Invoices stay in Stripe for the statutory retention period.
Still need help? Contact support