Usage and AI billing

Bill from the AI model price list

Bill each AI model at its public list price or your own cost plus a markup, set prices per customer, check the source of every price, and see your margin.

You do not have to type a rate for every AI model you resell. A usage price can bill each model at its price in the model price list, plus your markup. We keep a dated copy of a public price list and update it every hour, and every invoice line names the list row it was priced from.

This guide builds on Meters and rate cards: you need a meter that groups usage by model and token type.

The price list

Open the organization Settings → Model prices. The Price source card shows when the list was last updated and its version. The Prices card lists each provider, model and token type with its List price, Your cost, Currency and the time the price Starts.

  • Filter by model name, Provider, With your cost only or Used in the last 35 days, then select Apply filters.
  • Open the row menu and select View history to see every list price and every cost that the model has had.
  • A model that the source has not listed for 3 days shows "Not in the source since" and a date.

We check the source every hour, at 10 minutes past the hour. A new price applies from the time we take it in, so usage that is already recorded never changes price. A list follows its source with a delay: if your provider changes a price, usage before we take in the change bills at the last price. To bill the exact cost of each call, see Bill the reported cost first.

We never convert them. For a business that bills in another currency, set your cost in that currency or set fixed rates. Otherwise each model bills the default rate of the rate card.

The list comes from genai-prices, under the MIT license, copyright (c) Pydantic Services Inc. 2025 to present.

When an update is held

If one update changes more than a quarter of the list, sets a price to zero, or moves a price by more than ten times, we wait before we apply it. Settings → Model prices then shows "A price update is waiting", and your bills use the last prices. When the source keeps the same prices for 6 hours, the update applies on its own, from that time, never backwards. A mistake in the source that is corrected within those hours never gets to a bill. You do not need to do anything.

If the source does not answer, the page says "We could not update the price list" and when we try again. Your bills use the last prices until then.

Set your cost

If you pay a provider less than its list price, record your cost. We use it for cost and margin, and as the markup base of a price that bills on your cost. Your cost applies to every business in the organization, and the price list update never changes it.

Open the model

In Settings → Model prices, open the row menu of the model and token type, and select Set your cost.

Enter the cost

Enter the Cost, Per (for example per 1M tokens) and the Currency. Leave Starts empty to start now, or select a later time. Add a Note if it helps, for example the contract name.

Save

Select Save. The Your cost column shows the new cost.

A cost starts now or later, so it never reaches back over usage that we have already costed. To change it, select End your cost on the row, then set a new cost from the end time. Only one cost applies to a model and token type at a time. You can delete a cost in View history only before it starts.

Setting and ending a cost needs a role with Set and end your cost for AI models.

Map the meter to the list

A price can bill from the list only when its meter says which event properties hold the model and the token type.

Open the meter

In Product Catalog → Meters, open the meter and select More → Edit meter. You can change this section even after the meter has usage.

Set the cost source

In the Cost section, set Cost from to Model price list.

Name the properties

Enter the Model property, for example model. Set Token type to From property and enter the Token type property, or select one fixed token type for every event. Each property must also be in the meter's Group by.

Set the provider if needed

Leave Provider at Find from the model when each model name belongs to one provider. If more than one provider lists a model, that model has no price: send the provider on your events, select From property and add that property to Group by, or select one provider.

Save

Select Save changes.

An event's own cost, when your app sends one, always comes first for cost and margin. For an event without one, we use your cost, else the list price.

Create a price that bills from the list

On a plan or add-on, add a Usage price on the meter as in Meters and rate cards, then:

FieldWhat to set
AmountBill from the model price list
Markup onList price: the list price plus the markup, whatever your cost is. Your cost: your cost plus the markup (cost-plus).
MarkupA percentage for every model that has no row of its own. 0 bills the base price.
Default rateThe rate for a model with no list price and no cost, so a new model still bills.
Rate card rowsFor some models, a Fixed rate or a Markup % of their own. Price now previews the rate at today's prices.

With Markup on set to List price and no list row for the model, we use your cost. With Your cost and no cost for the model, we use the list price.

For each model and token type, the first of these that applies sets the selling rate:

  1. The customer's own rate or markup on their subscription (see below).
  2. A row on the rate card that matches: a fixed rate or a markup.
  3. The price's Markup.

With a list price of $3.00, your cost of $2.00 and a 20% markup, per 1M tokens:

Markup onCustomer paysYour costMargin
List price$3.60$2.00$1.60
Your cost$2.40$2.00$0.40

Set a price for one customer

Open the subscription. Under an item that bills from the model price list, select Edit price. In Edit price for this customer, set a Markup for every model, or add rows under Rates for this customer with a fixed rate or a markup for some models. Leave Markup empty to use the markup of the price.

These values belong to this subscription only. A later change to the catalog price does not change them.

A price change in the middle of a period

When the list price or your cost for a model changes inside a billing period, the invoice splits that model's usage at the change: one line for each part, each at its own price and rounded half-up once.

Input tokens on small-v1 cost $3.00 per 1M until 15 November 10:00 UTC, then $2.50. The price has a 20% markup on the list price. The customer used 1,234,567 tokens before the change and 456,789 after it:

LineQuantityUnit priceAmount
small-v1 · input, to 15 Nov 10:001,234,567$3.60 per 1M444.44412¢ → $4.44
small-v1 · input, from 15 Nov 10:00456,789$3.00 per 1M137.0367¢ → $1.37

Check a price on an invoice

Under a usage line on the invoice, select Price source. For each part of the period, it shows:

  • the Unit price, and whether it came from the Model price list, Your cost, a Fixed rate or the Default rate;
  • Rate from: the Customer price, the Rate for this model on the rate card, or the Price markup;
  • the Markup and the base it applied to;
  • the List row id (for example mpr_XXXXXXXXXXXX01), the List price, the Source, the Source date that the source gave, and Applies from, when we started to bill with it.

People who can see margin also see your cost row and the line's cost.

Bill the reported cost first

Some providers report the cost of each request. OpenRouter, for example, returns usage.cost in every response, in USD. You can bill that exact cost plus your markup, and use the list only for calls that have no cost.

Send the cost on the events

Send the cost of the call as the event's cost (a decimal string in major units, for example "0.0000042"), with currency set to USD. The TypeScript SDK helper reportAiUsage does this for you: it puts the whole cost of a call on the call's first token event and "0" on its other token events.

Create the price

Create the price as in Create a price that bills from the list, but set Amount to Reported cost, else the model price list. All the other fields are the same, and so is Edit price for one customer.

For each model and token type:

  • Events with a cost bill the total of their costs, plus the markup. The markup is the model's own markup (the customer's or the rate card row), else the price's Markup.
  • Events without a cost bill from the list, exactly as Bill from the model price list bills them. Markup on applies only to these events.
  • A Fixed rate for a model applies to all of its tokens, including events that have a cost.
  • An event whose cost is in a different currency from the price bills from the list, as if it had no cost.

When a model and token type has both kinds of events in a period, the invoice shows two lines: one for the reported cost and one from the list. Under the reported-cost line, Price source shows Reported cost.

To bill only the reported cost, with no list at all, create the price with Cost on each event, plus a markup instead (see Meters and rate cards). This needs no extra request to the provider.

When list prices change

When a list price that a business uses changes, the business gets the webhook event model_prices_changed, with the old and new price of each change. A business uses a model when a meter mapped to the list counted it in the last 35 days, or a rate card names it.

Members whose role can set your cost also get an email, "Prices changed for N AI models". A change that you make to your cost or a selling rate does not send a notice.

See usage and margin

On the customer. The Usage this period card shows each metered subscription, its total so far and a projected total. Select View usage by model and day to open the customer's Usage page:

  • This period: each item and model with its Quantity, Amount and Projected amount. The projected amount is an estimate: it rates usage at the end of the period if it continues at the current rate. Amounts are before discounts, credits and tax.
  • Usage by day: the last 7, 30 or 90 days in the business time zone.
  • A warning lists any model that has no price and bills the default rate, with Set your cost next to each.

Across customers. Open Reports → Usage margin. Select From, To, Currency and Group by (Customer, Model or Meter). For finalized invoices dated in that range, it shows Revenue, Cost, Margin, Margin % and Lines without cost.

  • Revenue is the line amount after discounts and credit notes, before tax.
  • Cost is the event's own cost, else your cost, else the list price, fixed when the line is billed. Only meters that Sum a value or Count events have a cost.
  • A line with no cost is counted in Lines without cost and left out of both revenue and cost.

Cost and margin, on the report and on the customer's Usage page, need a role with View usage cost and margin.

In the portal. Customers see their usage this period on each metered subscription, by model and by day, with the amount. They never see your cost. Turn it on or off under Settings → Hosted pages → Usage; see Usage pricing.

Copyright © 2026