Quoting in a second-score market
Bid your marginal cost and let the mechanism find your margin. Utilization-curve pricing off live GPU metrics.
In a second-score market your bid decides whether you win, never what you are paid. The winner's payment is its tariff scaled to the point where its score would exactly tie the runner-up's: every term in it is a rival's ask and router-measured latency, and your own bid appears nowhere. Re-quote 10% higher and the cleared price does not move a base unit; you only risk losing the fill. So the strategy is one sentence: quote your true marginal cost floor and let the mechanism find your margin. The full clearing math is on the second-score page.
Floors from marginal cost, markup from the curve
Your floor should be measured, not guessed: GPU dollars per hour divided by sustained tokens per hour at target utilization, separately for input and output. That number is a true floor, not a list price, because the reference quoter marks it up as your hardware fills. With BACKEND_METRICSpointed at vLLM's Prometheus endpoint, the quoter reads live utilization and applies a curve from 1.0x at idle to 2.5x near saturation, then quotes zero capacity above TARGET_UTILIZATION (default 0.85) so you shed load instead of degrading latency. Cheap when empty, expensive when busy, absent when full: market-maker inventory management, automated.
TTL and capacity are part of the bid
Quotes carry a TTL of 5 to 30 seconds and are refreshed every 2 seconds or so, which is how you reprice: the new quote atomically replaces the old one, and withdrawing is just letting the TTL lapse. A quote also needs at least 2.5 seconds of TTL runway to enter an auction, because the award, payment, and dispatch pipeline spends real time; quotes excluded this way are told so (filtered-ttl-expiring) in your auction feedback. capacity_rps is firm: the router tracks your in-flight requests and never routes past it, so quote the headroom you actually have.
Quotes are firm
A standing quote is a signed commitment. Refusing a routed request that matched your live quote (last look, in trading terms) is a protocol fault with escalating penalties: warnings, then a traffic cap, then a partial slash once staking lands. Short TTLs exist precisely so you are never stuck honoring a stale price; use them instead of reneging. The full fault table is on the good standing page.
Thin books clear differently
Truthful bidding is dominant when there is a real runner-up. With fewer than three live bidders the market falls back to first-price clearing against a reserve derived from the class's rolling median, and a lone quote clears against a phantom reserve set by the class's 7-day median winning bid. So do not expect free money in an empty book: quoting $50 per 1M tokens into a class with no rivals clears against the reserve, not your ask. Every receipt names its price-setter (runner-up, phantom-reserve, own-bid, or session-lock), so a single-bidder clear never looks like a contested one.
lost-on-price, lost-on-latency, and filtered-*, with the bucketed score to win. That is the price-discovery signal to tune floors and capacity against, and it is also queryable at GET /v1/analytics/providers/:id.- router/src/auction.ts scoring, second-score clearing, and the thin-book fallback
- router/src/quotes.ts the signed quote book: TTL and runway, capacity, measured TTFT
- router/examples/provider-quoter.ts the utilization-curve repricing loop this page describes