Customer pricing and margin

Record what you charge each customer, see your margin on their AI spend, and get told or stop serving when it falls too low.

If you resell AI to your own customers, record what each one pays you. CoreValue then shows revenue and margin next to each customer's cost, warns you when a margin gets thin, and can stop serving a customer before they cost more than you are willing to carry.

Customer pricing never changes what a provider charges you. It only records your side of the deal.

Budgets & Limits › Customers with prices and margins

Before you start

RequirementDetail
WhereTop bar → Budgets & Limits → Customers (/budgets?tab=customers).
RoleViewing the tab needs reports.read. Setting or removing a price needs spend_controls.write. Owners and admins have both. See Roles and permissions.
PlanGrowth or Enterprise. On another plan the price fields are read-only; a price set earlier still applies and can be removed.
TrafficRequests must carry Cova-Customer-Id. See Per-customer budgets.

Set a price

Open the price dialog

  • For one customer, click Price on the customer's row.
  • For every customer without a price of their own, click Default price at the top of the tab.

The table lists customers that have a budget or a price of their own. To price a customer who has neither, give them a budget first with Add limit, or cover them with the default price.

Fill in the price

FieldWhat it means
Monthly fee (USD)A fixed amount the customer pays each month.
Markup on usage (%)What you charge on top of their AI cost. 0 means you resell usage at cost; leaving it blank means usage is not resold at all.
Margin floor (%)Optional. The lowest margin you accept, from 0 up to (not including) 100.
At the floorAppears once a floor is set. Alert me, keep serving, or Refuse this customer's requests.

A price needs a fee, a markup, or both. With a markup and no fee the margin never changes, so the dialog refuses a floor above it, because every request would breach it.

Save

Click Save price. To take a price away, open the dialog and click Remove price; a customer with no price of their own then falls back to the default price, if there is one.

How revenue and margin are calculated

For a customer whose AI cost this month is c:

PriceRevenueMargin
Fee F, no markupF(F − c) ÷ F
Markup m% (with or without a fee)F + c × (1 + m/100)(Revenue − c) ÷ Revenue

With a fee alone, revenue is fixed while cost grows, so the margin can go below zero. With a markup, the margin falls towards m ÷ (100 + m) as cost grows but never below it: 20% for a 25% markup.

On the Customers tab:

ColumnWhat it shows
PriceThe fee per month and the markup. (default) means the customer is on the default price.
Revenue · this monthRevenue for this calendar month so far.
MarginThis month's margin, with the floor beside it. Amber within 10 points above the floor, red below it.

The same revenue and margin appear in Chargeback, Unit economics and Value, shared across a customer's rows in proportion to cost.

What a margin floor does

Alert me, keep serving. CoreValue checks customer margins every 15 minutes. It sends a warning when a customer's margin is within 10 points above the floor, and an alert when it falls below the floor. Each is sent at most once per customer per month; a customer already below the floor at the first check gets only the alert. Alerts go by email to your budget alert recipients and to Slack channels set up for budget alerts. They are not sent to webhooks.

Refuse this customer's requests. The floor becomes a ceiling on what the customer may cost you this month: the cost at which their margin would reach the floor. The dialog shows it as Requests stop at an amount of cost this month. Once the customer's cost reaches it, the gateway refuses further requests that carry their Cova-Customer-Id, as it would for a customer budget set to refuse, until the month ends. If the customer also has a refusing budget at the same or a lower amount, that budget applies instead. The same margin alerts are sent as well.

A floor the markup alone keeps the margin above (a floor at or below m ÷ (100 + m)) has no ceiling and refuses nothing.

Like customer budgets, this is enforced on the customer ID your application sends. To bound a key whatever it sends, cap the key.

The price dialog with a refusing margin floor

On this page