Skip to content
OVA

Payments

Inference market

OVA routes every model call through Surplus Intelligence, an open inference market, so each call is priced at the lowest available market price for your model. OpenRouter takes over automatically when the market cannot serve a call.

What Surplus Intelligence is

Surplus Intelligence is an OpenAI-compatible inference market. Sellers offer spare capacity for specific models, and a router sends each request to a seller. In its own words:

“An LLM inference marketplace. You call one OpenAI-compatible base URL, a router picks the cheapest healthy seller for the model you asked for, and settlement happens underneath.”

On pricing, its docs say: “Pricing is model-specific and market-based. SI routes to the cheapest available seller for the requested model. Prices are often below direct provider rates.” The quotes are from its published docs (llms.txt).

How a call is routed

Every agent step is one chat call. The server tries these routes in order and uses the first one that answers:

  1. Surplus Intelligence at https://api.surplusintelligence.ai/v1. The market picks the cheapest healthy seller for the model.
  2. A direct provider key (Anthropic, OpenAI, Google or Moonshot), if the operator set one.
  3. OpenRouter, at list price.

The model you choose never changes. Only the route that serves it does. Streaming and tool calls work the same on every route.

Model names

Each model maps to its id in Surplus's live GET /v1/models catalog and to its OpenRouter slug for the fallback.

ModelSurplus modelOpenRouter fallback
Claude Opus 5.5claude-opus-5.5anthropic/claude-opus-5.5
Claude Sonnet 5claude-sonnet-5anthropic/claude-sonnet-5
GPT-6.1 Solgpt-6.1-solopenai/gpt-6.1-sol
Gemini 4 Argongemini-4-argongoogle/gemini-4-argon
Kimi K3kimi-k3moonshotai/kimi-k3
Claude Haiku 4.5claude-haiku-4.5anthropic/claude-haiku-4.5
GPT-5.4 Minigpt-5.4-miniopenai/gpt-5.4-mini
Gemini 3.1 Flash Litegemini-3.1-flash-litegoogle/gemini-3.1-flash-lite

What you pay

Surplus returns the cost of each call with the response, as usage.buyer_cost_micro. That is the base of your charge:

  • Routed through the market: the cost Surplus reports, capped at the model's list price, plus the 20% platform fee.
  • Served by the fallback: list price plus the 20% fee.

So when the market is cheaper than list, the saving is passed straight through, and a call never costs more than list. The charge is converted to SOL and deducted from your balance with the rest of the session.

Current market

These are the lowest live offers per model from Surplus's public market feed, refreshed about once a minute, next to list price. Both include the platform fee.

Reading the market…

  • Claude Opus 5.5
  • Claude Sonnet 5
  • GPT-6.1 Sol
  • Gemini 4 Argon
  • Kimi K3
  • Claude Haiku 4.5
  • GPT-5.4 Mini
  • Gemini 3.1 Flash Lite

Automatic fallback

If the market cannot serve a call, the same request goes to the next route straight away and the agent keeps working. The market is then skipped for a short time so later steps do not wait on it:

Surplus responseWhat happensMarket skipped for
no_sellers_for_modelNo one is serving that model. Falls back.60 s, that model
no_healthy_sellersTransient. Falls back.20 s, that model
route_deadline_exceededTransient. Falls back.20 s, that model
rate_limit_exceededFalls back.Retry-After, all models
invalid_api_keyKey problem. Falls back.5 min, all models
insufficient_creditCredit problem. Falls back.5 min, all models
Network error or 5xxFalls back.20 s, that model

Routing decisions use the error code, never the message text, as Surplus's docs recommend. If every route fails, the agent shows the error in chat.

Privacy

A call routed through the market is served by one of its sellers. Chat messages and desktop screenshots in that call go to Surplus Intelligence and the seller that serves it, or to OpenRouter on fallback. Their terms apply to that data. Your wallet address is not sent to any model provider.

Self-hosting

Set either key, or both. With Surplus alone there is no fallback. With OpenRouter alone, calls bill at list. With neither, the app and desktop still run and chat replies that no model is configured.

.env
# Primary: Surplus Intelligence buyer key (inf_...)
SURPLUS_API_KEY=
# Fallback when the market errors or has no offer
OPENROUTER_API_KEY=

The live market table reads Surplus's public GET /api/markets endpoint and needs no key. If it cannot be reached, list prices are shown.

Search documentation

Jump to a docs page