Custom prices

Price calls at your negotiated discount, your committed-use rate, or what your own GPUs cost, for any provider and any kind of model.

The price book has list prices. Your bill often doesn't: an enterprise agreement takes 20% off, a cloud commitment changes the rate, and a model running on your own GPUs has no list price at all. Custom prices fix that for your organization. Owners, admins and finance members set them under Settings › Prices.

Two kinds

What it does Use it for
Discount A percentage off every list price from one provider An enterprise agreement, Azure or AWS committed spend, a reseller
Model price Your own rates for one model: per million tokens, per unit, or both A negotiated rate on one model, a self-hosted model, a model the price book doesn't have yet

A model price wins over a discount, and a discount wins over the price book. A model price replaces the price book's rates for that model. Cached input, cache writes and audio use your input rate (and audio output your output rate) unless you set them, so you only need the rates the model actually has. A call that needs a rate you left blank, such as output tokens on a price with only an input rate, isn't priced by the custom price: it keeps the cost the SDK reported, or none.

Self-hosted models

Running Llama, Qwen, DeepSeek, a diffusion model or a world model on your own servers? Work out what one unit costs, then add it as a model price under any provider name, such as self-hosted:

You run Price it
A text model on 8 H100s at $2.10 an hour, 70% busy, 2,400 output tokens a second About $2.78 per million output tokens: 8 × $2.10 ÷ (0.7 × 2,400 × 3,600 ÷ 1,000,000)
An image model that takes 1.5 GPU-seconds per image on a $1.20/hour GPU $0.0005 per image
A video or world model rendering 1 second of output in 40 GPU-seconds on a $2.00/hour GPU $0.022 per second

Then send the calls with that provider name:

local = veqen.wrap(OpenAI(base_url="http://vllm.internal:8000/v1"), provider="self-hosted", project="genomics")
veqen.record("flux-dev", provider="self-hosted", units=4, project="catalog-images")
const local = wrap(new OpenAI({ baseURL: "http://vllm.internal:8000/v1" }), { provider: "self-hosted", project: "genomics" });
record("self-hosted", "flux-dev", { units: 4 }, { tags: { project: "catalog-images" } });

To check the estimate against reality, enter the month's GPU bill on Reconciliation: the capture rate shows how close your unit price is.

What changes

Calls received after you save a price use it, and are stored with the price version custom. Calls already in the ledger keep the price they were recorded with, so past months and approved closes don't move. The SDKs still price with list prices locally; the cloud ledger's price is the one in reports, budgets and the close.

Every change is in the audit log.