---
title: Who pays & who serves (model vendors)
---

# Who pays & who serves (model vendors)

## What it is

When you run a session on a model that is not Claude — DeepSeek, GLM, Kimi, MiniMax, Meta, Qwen or
OpenRouter — two things have to be settled before it can start: **who pays** for it, and **which
company answers** it. Omniscio settles both from one ordered list per model family, called that
family's **supply list**.

Each row of a list is one way to pay:

- **Your own account** — a key or account you saved with a company. The row also names the company
  that serves it: the model's **maker** (DeepSeek, Z.ai for GLM, Moonshot for Kimi, MiniMax, Meta,
  Alibaba for Qwen, OpenRouter) or a **reseller** that runs some of the same models (DeepInfra,
  RunInfra, InferX).
- **Omniscio credits** — Omniscio's own key, paid from your prepaid credit balance. Omniscio picks the
  company that serves its credits.
- **Company lane for Omniscio developers** — company money for enrolled Omniscio developers, on
  DeepSeek only.

When a session connects, Omniscio walks the family's list from the top and uses the **first row that
can serve right now**. The model you picked never changes — only who pays and which company answers
it.

Which companies can serve which model, today:

| Model | Maker | Resellers that also serve it |
| --- | --- | --- |
| GLM 5.2 | GLM (Z.ai) | DeepInfra |
| GLM 5.3 Flash | GLM (Z.ai) | RunInfra |
| DeepSeek V4.1 Flash | DeepSeek | DeepInfra |
| DeepSeek V4 Flash | DeepSeek | DeepInfra, RunInfra, InferX |
| DeepSeek V4 Pro | DeepSeek | DeepInfra, RunInfra |
| Kimi K2.7 Code | Kimi (Moonshot) | DeepInfra |
| MiniMax M3 | MiniMax | DeepInfra |
| MiniMax M2.5 | MiniMax | DeepInfra |

Every other model of these families, and every Meta, Qwen and OpenRouter model, is served only by its
maker — or through Omniscio credits.

## Where to find it

**Settings → Accounts → Who pays & who serves.** The card sits in the list of other AI tools, just
above the Usage cascade card, and shows while **Show alternative AI providers** is on (the switch
that reveals every non-Claude engine). It holds one list per family, each row with its live state,
and a **List / JSON text** switch at the top. The same card is on the phone.

Searching Settings for "who pays", "own key", "Omniscio credits", "vendor", "reseller" or "model
vendors" lands on it.

## How it behaves

### How a row is chosen

A row can serve right now when all three of these hold:

- **A credential exists** — a key or account is saved for that company. A reseller row also needs
  that reseller's own card in Settings → Accounts switched on ("Allow … sessions"), and — for every
  reseller except DeepInfra, which Omniscio reaches directly — Omniscio's local model proxy able to
  start. An Omniscio credits row needs you signed in, on a plan that includes that family (GLM
  credits need Pro; the other families are open to every plan).
- **Its account is not known to be out of credit** (see below).
- **Its company serves the model you picked.**

A row limited to DeepSeek's peak hours is also passed over outside those hours (see below).

The walk happens every time a session connects — when it starts, and again whenever it is restarted
or continued — so a change to a list reaches every session at its next connection. A new user's lists
start as their own account with the maker first, then Omniscio credits — except GLM, whose list starts
with your own account only (add an Omniscio credits row to pay for GLM with credits). A list with no
rows means that family's sessions cannot connect, and the card says so.

### What each row state means

The states are worked out for sessions on this computer.

| State | What it means |
| --- | --- |
| Serving now | New sessions for this family connect here. |
| Ready if needed | Used when the rows above it can't serve. |
| Not set up | No key or account is saved for this company yet, or it is switched off. |
| Out of credit | Skipped until the time shown, when Omniscio tries it again — for example "Skipped until 2:40 PM, when Omniscio tries it again." |
| Not signed in | Sign in to Omniscio to use this row. |
| Daily spending cap reached | Today's spending cap for this company is used up; it opens again tomorrow. |
| Not available to you | Your plan or account doesn't include this row yet. |
| Doesn't serve the usual model | This company doesn't offer the model this family starts on. |
| Not used for this kind of session | Only some rows can serve this kind of session, and this is not one of them. |
| Waiting for peak hours | This row is limited to DeepSeek's peak-price hours and it is outside them right now; the next row serves. |

A reseller row carries a **No cache discount** tag when that company publishes no discounted price for
repeated (cached) text — today CrofAI, RunInfra and InferX — because the same work can cost several
times more there. DeepInfra does give the discount, so its DeepSeek rows carry no tag.

A DeepInfra row connects straight to DeepInfra's own Claude-style connection
(`api.deepinfra.com/anthropic`) with your DeepInfra key, so the cached text DeepInfra reports is
counted and Omniscio's cost figures for a DeepInfra session match the bill DeepInfra sends. The other
resellers are reached through Omniscio's local model proxy, which keeps the discount but drops the
cached count from streamed replies, so their cost figures in Omniscio can read higher than their
bills. One small gap remains on DeepInfra: a reply cut off mid-way (for example when a session is
stopped while it is answering) is not counted, because DeepInfra reports usage only when a reply
finishes.

### Cloud sessions and your keys

A cloud session never receives your API key. When its list picks your own account — at the maker
(DeepSeek, GLM, Kimi and the rest) or at DeepInfra — the cloud machine is given a one-time pass
instead, and its requests travel back over its existing connection to your computer, where Omniscio
adds your key and passes them on to that company. Your keys stay on your computer, and a pass stops
working the moment that session's run ends.

- **Your computer's internet carries the cloud session's model traffic** — each request goes cloud
  machine → your computer → the company, and the reply comes back the same way.
- **Omniscio must be running** for a cloud session to use your own account. If the part of Omniscio
  that relays these calls is not running, cloud sessions skip your own-account rows and use the next
  row in the list (for example Omniscio credits).
- **Which rows a cloud session can use:** your own account at the maker or at DeepInfra, and Omniscio
  credits. CrofAI, RunInfra and InferX (reached through the local model proxy) and the developer
  company lane are used only by sessions on this computer.
- If a cloud session reports "This cloud run has ended", send it another message — that starts a new
  run with a new pass.
- **Your Claude account works the same way.** A cloud session running on your Claude sign-in or your
  Anthropic API key is given a one-time pass too, so your sign-in never leaves your computer; your
  computer keeps the sign-in fresh for as long as the session runs. If Omniscio cannot relay right
  then, the cloud session is stopped before any cloud machine starts, and nothing is charged.

### Changing a list

- **Move up / Move down** change the order.
- **Remove** takes a row off; a toast offers **Undo**.
- **Peak hours only** (the moon button, on DeepSeek rows) limits a row to DeepSeek's peak-price hours;
  the row then carries a **Peak hours only** tag. Press it again to let the row serve at any hour.
- **Add a row…** offers the rows the list doesn't have yet; a new row goes to the bottom. A reseller is
  offered only while the model-proxy providers are shown (Settings → Lab → "GPT, Grok, CrofAI &
  DeepInfra via model proxy", on by default), and the company lane only to an enrolled Omniscio
  developer.
- **JSON text** shows the same lists as plain text. In each row, "pay" is "you", "omniscio" or
  "company", and "vendor" names the company that serves your own account. **Save** (or
  Ctrl/Cmd+Enter) checks every row first and, if one can't be used, names the family and the row
  instead of saving; **Discard changes** puts the text back. A family you leave out gets its starting
  list back.

### When a row runs out of credit

A row runs out when its company refuses a turn for lack of credit — a payment-required or an
insufficient-balance answer, even one that arrives as an empty turn. A hiccup that Omniscio's gateway
only passes along from another company does not count.

- **GLM's backup key goes first.** If the row is your own GLM account and you saved a GLM fallback
  key, the session switches to that key before the row is given up.
- **The account is marked out of credit for every session.** Omniscio remembers the account behind
  the row, not just the row: when your Omniscio credits run out, the credits row of every family is
  skipped; when your DeepInfra account runs out, every DeepInfra row is skipped, whichever family it
  serves.
- **Omniscio tries it again every ten minutes.** One session at a time is let through to use the
  account. If its turn is answered, the account is open again for everyone; if it is refused again,
  the account waits another ten minutes. With **Auto-continue on balance refund** switched on, your
  own DeepSeek or Kimi account reopens the moment its balance check sees money. After a restart,
  each account is simply tried again once.
- **The session moves to the next row and resends your message**, on the first message or in the
  middle of a conversation. A cloud session moves only to a row a cloud session can use. The session
  notes the switch once in its own history — for example "This session switched to your Omniscio
  credits because your own DeepSeek account ran out of credit, and is carrying on." A session that
  simply starts on the next row says nothing.
- **One inbox card per account.** The first time an account is marked, the inbox shows **"Out of
  credit: your own DeepSeek account"** (or "your Omniscio credits", …): "New sessions skip it and use
  whoever is next in their list. Omniscio tries it again every 10 minutes." The card goes away by
  itself when the account serves again or a balance check sees money; a card left from before a
  restart goes away on that account's first answered turn.
- **If no row is left**, the running session stops with a message that names who paid: your own
  account (with an **Add credit** link to that company's billing page), or your Omniscio credits (top
  them up, or add your own key).
- **A session that cannot start** is refused with a message that names the model — "everything in
  its Who pays & who serves list is out of credit right now" (Omniscio tries again every 10 minutes;
  add credit to any of them), or "its Who pays & who serves list is empty". If a row is only waiting
  on setup — no key, not signed in — the usual "add a key" or "sign in" message shows instead.
  Omniscio never falls back to a way of paying that your list doesn't name.
- **The developer lane** is company money. When it refuses a turn without saying why, the session
  moves to the next row without marking the lane out of credit for anyone else; when it reports its
  cap, the lane is marked like any other account. When no later row can serve, the session stops
  and says so: send a message to retry — a busy lane clears within minutes, but a spending limit
  only once it resets or is raised — or add your own key for that provider to keep going sooner.

### Paying less while DeepSeek charges double

DeepSeek charges double Monday to Friday from 01:00 to 04:00 and from 06:00 to 10:00 UTC — in Eastern
time, 9 PM to midnight Sunday to Thursday and 2 to 6 AM Monday to Friday while daylight time lasts, an
hour earlier in winter. The screen names each window's days and hours on your own clock. During those hours
DeepInfra served the same DeepSeek V4.1 Flash for about half DeepSeek's price at 2026-09-28's sale
prices (about 20% less at its regular prices), while DeepSeek itself is cheaper the rest of the week.

- **Set it up** by putting a DeepInfra row first in the DeepSeek list and pressing its moon button,
  with your own DeepSeek account and Omniscio credits below it. The DeepInfra row needs your DeepInfra
  key and "Allow DeepInfra sessions" switched on.
- **Sessions move at their next connection** when the hours start or end. The first reply after a
  move re-reads the conversation at the full input price once; after that the cache discount applies
  again.
- **The hours follow DeepSeek's own clock** — the same one Omniscio prices DeepSeek with — so they
  stay right when clocks change. Chinese public holidays, when DeepSeek is cheap all day, are not
  known to it: the row is still used during the usual hours then.
- **Cloud sessions stay on DeepSeek** — a cloud session never uses a reseller row.
- **Quality** — DeepInfra serves a compressed (fp8) build of the model; Omniscio's model test on
  2026-09-23 found it answering as well as DeepSeek's own on coding and long documents.

### Where the list works differently

- **Cloud sessions** use your own account with the model's maker, or Omniscio credits. A reseller
  row and the company lane are skipped there, because a cloud box runs no local model proxy.
- **Side questions** (asides) walk the same list, but never use the company lane.
- **A brand-new user's first free session** is paid by Omniscio ahead of the list.
- **Claude** has no supply list — Claude sessions use your Claude accounts.
- **The usage cascade** is a different feature: it moves a session to a different model when a plan's
  usage runs out. The supply list never changes the model.

### Which row actually served

Omniscio records the row that actually served each connection, and what follows reads that record: a
refusal is read as coming from the company that served, a turn is priced at that company's rate, and
an "Add credit" link opens that company's billing page.

You can see it too: on a started session, hover the model pill in the session header to read **Paid
by: …** — for example "Paid by: Omniscio credits" or "Paid by: Your own DeepSeek account". It names
the row that served the session's latest connection. Phones have no hover, so the line does not show
there. Right after you switch a session to another engine, the line stays hidden until that engine's
first connection.

### What it replaced

- **Resellers are no longer engines.** DeepInfra, RunInfra and InferX no longer appear as the engine
  for a DeepSeek, GLM, Kimi or MiniMax model, or as a default engine: you pick the model under its
  maker, and the family's list decides who serves it. A model only a reseller offers (for example a
  Llama model on DeepInfra) can still be picked under that reseller. CrofAI is retired. OpenRouter
  stays an engine for the models no other engine offers, with its own list for your OpenRouter key and
  Omniscio credits.
- **The old switches are gone or ignored:** the Model vendors section with its "Auto (cheapest
  ready)" choice and per-model vendor pins, automatic cheapest-vendor routing, the per-provider
  payment order, the "Omniscio lane" pin and the payer choices under "How each AI connects", the "Use
  Omniscio … credits" switches, and the "Omniscio GLM credits" entry in the GLM account list.
- **Your older settings were carried over.** The first time any family connects (or you open the
  card), each list is built from what really happened before — a saved key beat an old "Omniscio
  lane" pin, for example, so the key stays first. The old settings stay in the settings file, ignored,
  for one release, so going back to an older version loses nothing.
- **Usage cascade rungs that named a reseller** now run on that model's family, and the family's list
  decides who serves.
- **A session already on a reseller engine** keeps working: at its next connection it uses its model
  family's list.

## For agents

- **The setting** — `supplyLists` in `AppSettings`: an object mapping each family (`deepseek`, `glm`,
  `kimi`, `minimax`, `meta`, `qwen`, `openrouter`) to at most 16 rows of `{ "pay": "you" }`,
  `{ "pay": "you", "vendor": "<provider id>" }`, `{ "pay": "omniscio" }` or `{ "pay": "company" }`.
  A "you" row with no vendor means the maker; "company" is valid only for `deepseek`. A `deepseek`
  row may add `"onlyDuring": "deepseek-peak"`: it then serves only inside DeepSeek's peak-price hours
  (`rowInItsHours`, judged by the same `isOffPeakAt(DEEPSEEK_OFF_PEAK)` clock that prices DeepSeek) and
  is skipped as `outside-its-hours` otherwise — checked last, so a real setup gap still shows first. A
  row the reader cannot use (a retired vendor, a payer the family has no lane for, hours its family has
  no window for) is dropped when the list is read. `{}` means not converted yet; the conversion then builds every missing family from the
  older settings (empty older settings give maker-then-credits, and GLM gets its maker row only).
- **The live states** — IPC `provider:get-supply-lists` answers every family's rows with their
  states for a local session, and an out-of-credit row's `emptyUntil` (when its account is tried
  again); it never carries a key or a balance. Writes go through the ordinary settings update.
- **The out-of-credit memory** — held in the main process by the list service, never saved: one
  mark per account (`supplyAccountKey`: `you:<vendor>`, `omniscio` or `company`), re-checked every
  10 minutes by exactly one connection, and reopened by that session's answered turn or by the
  balance sweeper (`restoreFundedKeys`, DeepSeek and Kimi, while balance auto-resume is on).
- **The one handler** — `supplyFallbackGate` in
  [supply-fallback.ts](../../src/main/process/turn-end-error-gates/supply-fallback.ts), row 1 of the
  turn-end gate table and the first line of the placeholder-stuck recovery. Its transcript note is
  `recovery.supplySwitch`; the inbox card's dedup key is `supply-row-empty:<account>`; the refusals
  that name the model are `supply.refusal.allEmpty` and `supply.refusal.emptyList`.
- **Retired keys, kept in the file for one release and ignored** — `providerFunding`,
  `modelVendorOverrides`, `providerKeyExhausted` (the old per-provider "key is out of balance" flag),
  and the payer pins (`company-credits`, `managed-provider`) inside `providerRouteOverrides`, which
  now carries only Codex's own routes.
- **The code** — the rows, the reader and the road rules live in
  [supply-list.ts](../../src/shared/providers/supply-list.ts); the conversion of older settings in
  [supply-list-upgrade.ts](../../src/shared/providers/supply-list-upgrade.ts); the served-by record
  (stored on `sessions.served_by`) in [served-by.ts](../../src/shared/providers/served-by.ts); the
  main-process reader, converter and row judge in
  [supply-list-service.ts](../../src/main/services/providers/supply-list-service.ts); the one
  connection walk for every road in
  [supply-connect.ts](../../src/main/services/providers/supply-connect.ts); the card in
  [SupplyListsSection.tsx](../../src/renderer/src/features/settings/sections/accounts/SupplyListsSection.tsx).
- **The log line** — each connection writes one `[supply] <family>: <row> — passed over <row>
  (<reason>)` line to the process log, naming the row that served and why earlier rows were skipped.
- **The rules and the orientation** — [who-pays-who-serves-contract.md](../../.claude/memory/contracts/who-pays-who-serves-contract.md)
  and [supply-list-map.md](../../.claude/memory/supply-list-map.md).

## Related

- **Switching between AI providers** ([switching-providers.md](switching-providers.md)) — picking the
  engine and the model, which the supply list never changes.
- **Usage cascade** ([usage-cascade.md](usage-cascade.md)) — moving to a different model when a plan's
  usage runs out.
- **The provider pages** — [DeepSeek](deepseek-provider.md), [GLM](glm-provider.md),
  [Kimi](kimi-provider.md), [MiniMax](minimax-provider.md), [Meta](meta-provider.md),
  [Qwen](qwen-provider.md) and [OpenRouter](openrouter-provider.md), each with its own keys and
  models.
- **API keys and credits** ([api-keys.md](api-keys.md)) — the prepaid balance an Omniscio credits row
  draws down.
