Bill from the AI model price list
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.
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:
| Field | What to set |
|---|---|
| Amount | Bill from the model price list |
| Markup on | List price: the list price plus the markup, whatever your cost is. Your cost: your cost plus the markup (cost-plus). |
| Markup | A percentage for every model that has no row of its own. 0 bills the base price. |
| Default rate | The rate for a model with no list price and no cost, so a new model still bills. |
| Rate card rows | For 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:
- The customer's own rate or markup on their subscription (see below).
- A row on the rate card that matches: a fixed rate or a markup.
- The price's Markup.
With a list price of $3.00, your cost of $2.00 and a 20% markup, per 1M tokens:
| Markup on | Customer pays | Your cost | Margin |
|---|---|---|---|
| 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:
| Line | Quantity | Unit price | Amount |
|---|---|---|---|
| small-v1 · input, to 15 Nov 10:00 | 1,234,567 | $3.60 per 1M | 444.44412¢ → $4.44 |
| small-v1 · input, from 15 Nov 10:00 | 456,789 | $3.00 per 1M | 137.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.
Related
Meters and rate cards
Count the usage events your app sends with a meter, match them to customers with usage keys, and bill each model and token type from a rate card.
Prepaid credits
Sell and give prepaid credit for usage: credit units, credit packs, plan credits with rollover, tax before or after credit, blocking, overdraft and holds.