---
title: "Bill from the AI model price list"
description: "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."
canonical_url: "https://twominutebilling.com/help/guides/usage-and-ai-billing/model-price-list"
---
# 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](https://twominutebilling.com/help/guides/usage-and-ai-billing/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](#bill-the-reported-cost-first).

<note title="List prices are in USD">

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.

</note>

The list comes from [genai-prices](https://github.com/pydantic/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.

<steps>

### 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.

</steps>

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.

<steps>

### 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**.

</steps>

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](https://twominutebilling.com/help/guides/usage-and-ai-billing/meters-and-rate-cards), then:

<table>
<thead>
  <tr>
    <th>
      Field
    </th>
    
    <th>
      What to set
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Amount
      </strong>
    </td>
    
    <td>
      <strong>
        Bill from the model price list
      </strong>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Markup on
      </strong>
    </td>
    
    <td>
      <strong>
        List price
      </strong>
      
      : the list price plus the markup, whatever your cost is. <strong>
        Your cost
      </strong>
      
      : your cost plus the markup (cost-plus).
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Markup
      </strong>
    </td>
    
    <td>
      A percentage for every model that has no row of its own. 0 bills the base price.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Default rate
      </strong>
    </td>
    
    <td>
      The rate for a model with no list price and no cost, so a new model still bills.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Rate card
      </strong>
      
       rows
    </td>
    
    <td>
      For some models, a <strong>
        Fixed rate
      </strong>
      
       or a <strong>
        Markup %
      </strong>
      
       of their own. <strong>
        Price now
      </strong>
      
       previews the rate at today's prices.
    </td>
  </tr>
</tbody>
</table>

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:

<table>
<thead>
  <tr>
    <th>
      <strong>
        Markup on
      </strong>
    </th>
    
    <th>
      Customer pays
    </th>
    
    <th>
      Your cost
    </th>
    
    <th>
      Margin
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        List price
      </strong>
    </td>
    
    <td>
      $3.60
    </td>
    
    <td>
      $2.00
    </td>
    
    <td>
      $1.60
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Your cost
      </strong>
    </td>
    
    <td>
      $2.40
    </td>
    
    <td>
      $2.00
    </td>
    
    <td>
      $0.40
    </td>
  </tr>
</tbody>
</table>

## 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:

<table>
<thead>
  <tr>
    <th>
      Line
    </th>
    
    <th>
      Quantity
    </th>
    
    <th>
      Unit price
    </th>
    
    <th>
      Amount
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      small-v1 · input, to 15 Nov 10:00
    </td>
    
    <td>
      1,234,567
    </td>
    
    <td>
      $3.60 per 1M
    </td>
    
    <td>
      444.44412¢ → <strong>
        $4.44
      </strong>
    </td>
  </tr>
  
  <tr>
    <td>
      small-v1 · input, from 15 Nov 10:00
    </td>
    
    <td>
      456,789
    </td>
    
    <td>
      $3.00 per 1M
    </td>
    
    <td>
      137.0367¢ → <strong>
        $1.37
      </strong>
    </td>
  </tr>
</tbody>
</table>

## 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.

<steps>

### 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](#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.

</steps>

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](https://twominutebilling.com/help/guides/usage-and-ai-billing/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](https://twominutebilling.com/help/guides/usage-and-ai-billing/usage-pricing).

## Related

- [Meters and rate cards](https://twominutebilling.com/help/guides/usage-and-ai-billing/meters-and-rate-cards)
- [Usage pricing](https://twominutebilling.com/help/guides/usage-and-ai-billing/usage-pricing)
- [Prepaid credits](https://twominutebilling.com/help/guides/usage-and-ai-billing/prepaid-credits)
- [Bill AI tokens with the API](https://twominutebilling.com/help/developers/recipes/bill-ai-tokens)
- [Meter usage events with the API](https://twominutebilling.com/help/developers/recipes/meter-usage-events)


## Sitemap

See the full [sitemap](https://twominutebilling.com/sitemap.md) for all pages.
